Función que valida un ISBN (International Standard Book Number ó Código Internacional Normalizado para Libros).
Validar un código ISBN Por Luis María Guayán, Tucumán, Argentina
Actualmente un ISBN consta de 10 caracteres (9 caracteres del número de libro, mas 1 caracter de control).
La función que valida un ISBN es la siguiente:
? Val_ISBN("0-534-35964-7")
? Val_ISBN("84-89660-00-X")
FUNCTION Val_ISBN(tcISBN)
LOCAL ln, lnSuma, lnDigito, lcDigito
tcISBN = ALLTRIM(CHRTRAN(tcISBN,"- ",""))
IF LEN(tcISBN) # 10
RETURN .F.
ENDIF
lnSuma = 0
FOR ln = 1 TO 9
lnSuma = lnSuma + VAL(SUBSTR(tcISBN,ln,1))*(11-ln)
ENDFOR
lnDigito = 11-MOD(lnSuma,11)
lcDigito = IIF(lnDigito=10,"X",STR(lnDigito,1))
RETURN lcDigito = SUBSTR(tcISBN,10,1)
ENDFUNC
A partir del 1° de enero de 2007 todos los ISBN se normalizarán a 13 caracteres (Bookland EAN).
Los ISBN de 10 caracteres ya existentes, se convertiran anteponiendo el prefijo "978", mas los 9 caracteres del número de libro, mas 1 digito de control que se calculará con mismo el algoritmo de los códigos EAN13.
Los ISBN de nuevas publicaciones se generarán anteponiendo el prefijo "979", mas los 9 caracteres del número de libro, mas 1 digito de control que se calculará con mismo el algoritmo de los códigos EAN13.
Por ejemplo el ISBN 84-89660-00-X se convertirá como se muestra a continuación:
Prefijo "978" + 9 digitos del ISBN + 1 dígito de control.
Nuevo ISBN = 978 848966000 7
La función para validar un código EAN13 es la siguiente:
? Val_EAN13("9788489660007")
? 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
|