Función que valida un ISSN (International Standard Serial Number o Código Internacional Normalizado de Series).
Validar un código ISSN Por Luis María Guayán, Tucumán, Argentina
El ISSN (International Standard Serial Number o Código Internacional Normalizado de Series) identifica publicaciones periódicas o seriadas realizadas en cualquier país o lengua (revistas, periodocos, colecciones de libros).
Actualmente un ISSN consta de 8 caracteres (7 caracteres de número + 1 caracter de control).
La siguiente función valida un ISSN:
? Val_ISSN("1366-204X")
? Val_ISSN("1606-9536")
FUNCTION Val_ISSN(tcISSN)
LOCAL ln, lnSuma, lnDigito, lcDigito
tcISSN = ALLTRIM(CHRTRAN(tcISSN,"- ",""))
IF LEN(tcISSN) # 8
RETURN .F.
ENDIF
lnSuma = 0
FOR ln = 1 TO 7
lnSuma = lnSuma + VAL(SUBSTR(tcISSN,ln,1))*(9-ln)
ENDFOR
lnDigito = 11-MOD(lnSuma,11)
lcDigito = IIF(lnDigito=10,"X",STR(lnDigito,1))
RETURN lcDigito = SUBSTR(tcISSN,8,1)
ENDFUNC
A partir del 1° de enero de 2004, todos los ISSN se normalizarán a 13 caracteres.
Los nuevos ISSN se formarán anteponiendo el prefijo "997", mas los 7 caracteres del número ISSN, mas 2 digitos para señalar un precio (casi siempre "00"), mas 1 caracter de control que se calculará con mismo el algoritmo de los códigos EAN13.
Por ejemplo el ISSN 1366-204X se convertirá como se muestra a continuación:
Prefijo "977" + 7 digitos del ISBN + 2 digitos "00" + 1 dígito de control.
Nuevo ISBN = 977 1366204 00 5
La función para validar un código EAN13 es la siguiente:
? Val_EAN13("9771366204005")
? Val_EAN13("7798007220004")
FUNCTION Val_EAN13(tcEAN13)
LOCAL ln, lnSuma, lnDigito, lcDigito
tcEAN13 = ALLTRIM(CHRTRAN(tcEAN13,"- ",""))
IF LEN(tcEAN13) # 13
RETURN .F.
ENDIF
lnSuma = 0
FOR lnI = 1 TO 12
IF MOD(lnI,2) = 0
lnSuma = lnSuma + VAL(SUBS(tcEAN13,lnI,1)) * 3
ELSE
lnSuma = lnSuma + VAL(SUBS(tcEAN13,lnI,1)) * 1
ENDIF
ENDFOR
lnDigito = 10-MOD(lnSuma,10)
lcDigito = IIF(lnDigito=10,"0", STR(lnDigito,1))
RETURN lcDigito = SUBSTR(tcEAN13,13,1)
ENDFUNC
|