25 de enero de 2013

Validar el código de identificación de un contenedor de carga

Función para validar el código de identificación de un contenedor de carga.

Un contenedor es un recipiente de carga para transporte marítimo, fluvial o terrestre y sus dimensiones e identificación están normalizadas.

La identificación de un contenedor consta de un código alfanumérico de 11 caracteres. Las primeras cuatro pociciones son letras y le siguen seis números. A partir de estos 10 caracteres se calcula un dígito de verificación que ocupa la posición 11°

Se puede validar esta identificación con la siguiente función:

? ValidarContenedor("HOYU7510136")
? ValidarContenedor("HOyU7510136")

FUNCTION ValidarContenedor(tcCnt)
  LOCAL lnLen, lnSuma, lnCar, lcCheck
  #DEFINE CHR_VALIDOS "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

  m.tcCnt = ALLTRIM(m.tcCnt)
  m.lnLen = LEN(m.tcCnt)
  IF m.lnLen <> 11 OR NOT EMPTY(CHRTRAN(m.tcCnt, CHR_VALIDOS, ""))
    *- No valido
    RETURN .F.
  ENDIF

  m.lnSuma = 0
  FOR m.lnI = 1 TO m.lnLen - 1
    m.lnCar = ASC(SUBSTR(m.tcCnt, m.lnI, 1))
    m.lnCar = IIF(m.lnCar < 65, m.lnCar - 48, m.lnCar - 55)
    m.lnCar = m.lnCar + (INT(m.lnCar/11))
    m.lnSuma = m.lnSuma + m.lnCar * 2 ^ (m.lnI-1)
  ENDFOR
  m.lnCar = m.lnSuma - (INT(m.lnSuma/11)*11)
  *-- Digito verificador
  m.lcCheck = TRANSFORM(IIF(m.lnCar < 10, m.lnCar, 0))
  RETURN m.lcCheck == RIGHT(m.tcCnt, 1)
ENDFUNC

Luis María Guayán

No hay comentarios. :

Publicar un comentario