martes, 12 de octubre de 2021

Cálculo del dígito de control de un SSCC

Quizá te estés preguntando que es un SSCC... si es el caso, solo sigue leyendo si te interesan los desarrollos de algoritmos ;-)
El SSCC (Serial Shipping Container Code) es un código de identificación GS1 empleando principalmente en temas logísticos.
Este código SSCC se compone básicamente por cuatro partes, con un total de 18 dígitos (o sea números!!) incluido el dígito de control:
a) Dígito de extensión (un solo dígito)
b) Prefijo de la compañia (ocho dígitos)
c) Un número de referencia (ocho dígitos), y
d) Un dígito de control (un solo dígito).

Adicionalmente se puede añadir otro valor al inicio de estos 18 dígitos un identificador para indicar que es un código SSCC.

Visto qué es y cómo está compuesto este código SSCC, vamos a ver cómo se calcula el dígito de control.
El patrón de cálculo es:
i) Se enumera el código de derecha a izquierda, multiplicando los dígitos que ocupan una posición par por 1, y por 3 los digitos que ocupan posición impar.
ii) A continuación se suman los valores de los productos obtenidos.
iii) Para luego buscar la decena superior al resultado de la suma anterior.
iv) Por último se restan estos dos valores. El resultado obtenido es el digito de control.

Veamos cuál es la fórmula buscada, y desgranémosla:
Cálculo del dígito de control de un SSCC

La fórmula completa, en la celda C2:
=MULTIPLO.SUPERIOR.MAT(SUMA(SI(ES.PAR(LARGO(B2)-SECUENCIA(1;LARGO(B2))+1);1;3)*EXTRAE(B2;SECUENCIA(1;LARGO(B2));1));10)- SUMA(SI(ES.PAR(LARGO(B2)-SECUENCIA(1;LARGO(B2))+1);1;3)*EXTRAE(B2;SECUENCIA(1;LARGO(B2));1))
Si desglosamos la fórmula en partes, reconoceremos el patrón de cálculo comentado más arriba...

En una primera etapa debíamos enumerar el código de derecha a izquierda, multiplicando los dígitos que ocupan una posición par por 1, y por 3 los digitos que ocupan posición impar. Esta parte la conseguimos en nuestra fórmula con:
SI(ES.PAR(LARGO(B2)-SECUENCIA(1;LARGO(B2))+1);1;3)*EXTRAE(B2;SECUENCIA(1;LARGO(B2));1)
La función EXTRAE, junto a SECUENCIA se encarga de trabajar dígito a dígito, identificando su posición, y si esta es par o impar, para según el caso multiplicar por 1 o por 3.

El segundo paso era muy simple. Sumamos el resultado anterior:
SUMA(SI(ES.PAR(LARGO(B2)-SECUENCIA(1;LARGO(B2))+1);1;3)*EXTRAE(B2;SECUENCIA(1;LARGO(B2));1))

En el siguiente punto debemos buscar la decena superior a la suma anterior... para ello trabajaremos con la función MULTIPLO.SUPERIOR.MAT con un argumento de base 10:
MULTIPLO.SUPERIOR.MAT(resultado_suma;10)

Por último, para conseguir el deseado Dígito de control solo restamos ambas cantidades...
tal cual mostraba nuestra fórmula completa.

El detalle del paso a paso lo puedes ver, para los dos ejemplos de la imagen en las columnas E a V

Comentario final. Cuando tenemos que desarrollar algún algoritmo o fórmula en nuestro caso, es fundamental documentarse de todas las opciones y posibilidades que existan y apliquen para el correcto cálculo...

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.