Calcular dígito verificador de códigos de barra EAN13 con Oracle PL/SQL

En el trabajo tuve la necesidad de calcular el dígito verificador de códigos de barra EAN13 con el lenguaje PL/SQL de Oracle, y como estaba bastante perezoso para codificarlo por mí mismo me puse a probar varios ejemplos de código que había encontrado en Internet.

Los resultados de las pruebas de dichos ejemplos fueron diversos, y como en ciertas ocasiones el dígito verificador calculado no resultaba ser el correcto, al final decidí crear mi propia versión.

El código que sigue a continuación es una función que retorna el dígito verificador calculado en base a la cadena de caracteres que recibe como parámetro. La función es bastante simple y tiene amplio margen de mejora, pero el código básico requerido para calcular el dígito verificador funciona y es eso lo que pretendo dejar documentado.
CREATE OR REPLACE FUNCTION CODIGO_BARRAS_GENERAR_DV(P_CODIGO IN VARCHAR2, P_TIPO VARCHAR2 DEFAULT 'EAN13') RETURN VARCHAR2 IS
    L_SUM          NUMBER;
    L_MULTIPLE     NUMBER;
    V_CODIGO_EAN13 VARCHAR2(13) DEFAULT NULL;
BEGIN
    IF (P_TIPO = 'EAN13') THEN
        V_CODIGO_EAN13 := SUBSTR(LPAD(P_CODIGO,12,'0'),1,12);
        FOR I IN 1..12 LOOP
            IF (MOD(I,2) = 0) THEN
                L_MULTIPLE := 3;
            ELSE
                L_MULTIPLE := 1;
            END IF;

            L_SUM := NVL(L_SUM, 0) + SUBSTR(V_CODIGO_EAN13, I, 1) * L_MULTIPLE;
        END LOOP;

        RETURN V_CODIGO_EAN13||REPLACE((10 - MOD(L_SUM, 10)),10,0);
    ELSE
        RETURN NULL;
    END IF;
END;
ENLACE: Código disponible en Gist de Github.

Fuentes

Comentarios

Entradas populares