Código DC DNI Español

Post Reply
antolin
Posts: 475
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Código DC DNI Español

Post 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
Peaaaaaso de foro...
antolin
Posts: 475
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Código DC DNI Español

Post 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.
Peaaaaaso de foro...
antolin
Posts: 475
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Código DC DNI Español

Post 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,".","")
Peaaaaaso de foro...
User avatar
JmGarcia
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Código DC DNI Español

Post 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.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
antolin
Posts: 475
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Código DC DNI Español

Post 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.
Peaaaaaso de foro...
Post Reply