Código DC DNI Español

Código DC DNI Español

Postby antolin » Thu Nov 25, 2010 11:36 am

Por si a alguin le interesa, he aquí como calcular el Código de Control del DNI Español.

Code: Select all  Expand view

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: 491
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Código DC DNI Español

Postby antolin » Thu Nov 25, 2010 11:39 am

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: 491
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Código DC DNI Español

Postby antolin » Thu Nov 25, 2010 11:52 am

Calclar la letra del DNI también es muy sencillo:

Code: Select all  Expand view

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...
antolin
 
Posts: 491
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Código DC DNI Español

Postby JmGarcia » Fri Nov 26, 2010 9:28 pm

Code: Select all  Expand view
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
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Código DC DNI Español

Postby antolin » Mon Nov 29, 2010 10:57 am

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...
antolin
 
Posts: 491
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla


Return to Utilities / Utilidades

Who is online

Users browsing this forum: No registered users and 7 guests

cron