S10 (estándar UPU)La norma técnica u estándar S10 UPU (Unión Postal Univesal) define un sistema para asignar identificadores de 13 caracteres a objetos postales con el propósito de seguimiento y localización durante el envío. Emisión y gestión de identificadores S10Con el aumento en la liberalización y la posibilidad de múltiples servicios postales operando en el mismo país, el uso de códigos de país para designar el servicio postal es un problema. Para solucionar esto, cada país tiene un servicio postal designado que controla todos los identificadores S10 de aquel país; cualquier competidor por los servicios postales tendrá que cooperar con el dueño designado. La organización asignada por el país miembro de UPU dirigirá la creación y uso de identificadores S10, de entre todos los operadores bajo la autoridad de aquel país miembro de UPU, de tal manera que asegure que no ningún identificador S10 es reutilizado dentro de un periodo de 12 meses de calendario. La UPU recomienda un período de 24 meses calendario o más. [1] FormatoLos identificadores constan de un código indicador del servicio de dos letras, un número de serie de ocho dígitos (en el rango de 00000000 a 99999999), un único dígito de control y un código de país ISO de dos letras que identifica a la administración postal del país emisor[1]
Código indicador del servicio (Service indicator code)
Cálculo del dígito de control (Check-digit calculation)1) Ignore el código indicador de servicio y el código de país (ambos letras) 2) Asigne los pesos 8, 6, 4, 2, 3, 5, 9, 7 a los 8 dígitos, de izquierda a derecha 3) Calcular "S", que es la suma de cada dígito multiplicado por su peso. Por ejemplo, para el número 47312482: S = 48 + 76 + 34 + 12 + 23 + 45 + 89 + 27 = 200
4) Calcula el dígito de control, "C", según su definición: C = 11 - (S mod 11) Si C = 10, cambia a C = 0 Si C = 11, cambia a C = 5 Para el ejemplo: 47312482 C = 11 - (200 mod 11) = 11 - 2 = 9 Códigos para el cálculo en lenguaje de programaciónCódigo Python para el cálculo del dígito de controlPara Python 3.6 o posterior: def get_check_digit(num: int) -> int: """Get S10 check digit.""" weights = [8, 6, 4, 2, 3, 5, 9, 7] sum = 0 for i, digit in enumerate(f"{num:08}"): sum += weights[i] * int(digit) sum = 11 - (sum % 11) if sum == 10: sum = 0 elif sum == 11: sum = 5 return sum Código JavaScript para el cálculo del dígito de controlfunction getCheckDigit(num) { const weights = [8, 6, 4, 2, 3, 5, 9, 7]; const numArr = Array.from(String(num), Number); let sum = 0; numArr.forEach((n, i) => sum = sum + (n * weights[i])); sum = 11 - (sum % 11); if (sum == 10) sum = 0; else if (sum == 11) sum = 5; return sum; } Código Haskell para el cálculo del dígito de controlcheckDigit :: [Int] -> Int checkDigit ns | c == 11 = 5 | c == 10 = 0 | otherwise = c where weights = [8, 6, 4, 2, 3, 5, 9, 7] s = sum $ zipWith (*) weights ns c = 11 - (s `mod` 11) Véase también
Referencias
Enlaces externos
|