Page 1 of 1

Código DC DNI Español

Posted: Thu Nov 25, 2010 11:36 am
by antolin
Por si a alguin le interesa, he aquí como calcular el Código de Control del DNI Español.

Code: Select all

FUNCTION HallaDC(cBanco,cOficina,cCuenta)    //  cBanco -> CODIGO DEL BANCO (4 Caracteres)
LOCAL aVals := {1,2,4,8,5,10,9,7,3,6}        //  cOficina -> CODIGO OFICINA (4 Caracteres)
LOCAL nCont,nTot,nRest1,nRest2               //  cCuenta -> CODIGO CUENTA  (10 Caracteres)
LOCAL cCod := "00"+cBanco+cOficina

nTot := 0
FOR nCont =1 TO 10
    nTot += ( VAL(SUBSTR(cCod,nCont,1)) * aVals[nCont] )
NEXT
nRest1 := 11 - (nTot % 11)    // COMPLEMENTO A 11
nRest1 := IF(nRest1=11,0,IF(nRest1=10,1,nRest1))

cCod := cCuenta
nTot := 0
FOR nCont =1 TO 10
    nTot += ( VAL(SUBSTR(cCod,nCont,1)) * aVals[nCont] )
NEXT
nRest2 := 11 - (nTot % 11)    // COMPLEMENTO A 11
nRest2 := IF(nRest2=11,0,IF(nRest2=10,1,nRest2))

RETURN  ( ALLTRIM(STR(nRest1))+ALLTRIM(STR(nRest2)) )  // DEVUELVE EL DC (2 Carateres)
 
Muy sencillo. Espero que os sirva

Un saludo

Re: Código DC DNI Español

Posted: Thu Nov 25, 2010 11:39 am
by antolin
PERDON !!!! un pequño lapsus

Ese no es el del DNI es el DC de comprobación de numero de cuenta corriente. El del DNI lo pondré más adelante.

Re: Código DC DNI Español

Posted: Thu Nov 25, 2010 11:52 am
by antolin
Calclar la letra del DNI también es muy sencillo:

Code: Select all

FUNCTION DNILeter(cDni)   // cDni -> DIGITOS DEL DNI (Caracteres sin puntos)
   LOCAL cClv := "TRWAGMYFPDXBNJZSQVHLCKEF"
RETURN SUBSTR(cClv,MOD(VAL(cDni),23)+1,1)  /  DEVUELVE LA LETRA DEL DNI
 
Si el DNI viniera con puntos sólo hacer: cDni := STRTRAN(cDni,".","")

Re: Código DC DNI Español

Posted: Fri Nov 26, 2010 9:28 pm
by JmGarcia

Code: Select all

LOCAL cClv := "TRWAGMYFPDXBNJZSQVHLCKEF"
La "F" esta repetida dos veces.
Además el mayor valor del resto de dividir entre 23 es 22. Luego del 0 al 22 van 23 valores.
A la variable oClv le sobre el último caracter, que es una "F".

Interesantes funciones, sobre todo el del DC de las cuentas corrientes de bancos.

Re: Código DC DNI Español

Posted: Mon Nov 29, 2010 10:57 am
by antolin
Tienes razon JmGarcia. La ultima F sobra. El caso es que llevo utilizando esta función durante años y no me habia dado cuenta de ese detalle. Menos mal que esa última leta no entra en juego y no influye en el resultado.

Gracias por el apunte. Todos los dias se aprende algo nuevo.