En mis páginas, sección colaboradores, tienes lo que buscas.
(la página que te mostrará al entrar en esa sección es la nueva, linka con
la anterior)
Nos vemos.
Guillermo
--
==================================================
Te invito a visitar mis páginas sobre Visual Basic
http://guille.costasol.net/
==================================================
Miguel Angel Sobrino Lozano escribió en mensaje
<6jktg8$84q$1...@talia.mad.ibernet.es>...
Miguel Angel Sobrino Lozano escribió en mensaje
<6jktg8$84q$1...@talia.mad.ibernet.es>...
>BUENO A CAMBIO OS OFRECO ES TA FUNCION QUE CALCULA LA LETRA DE UN DNI.
Y no sería más fácil de la siguiente manera:
Teniendo en cuenta que el DNI lo tenemos en una variable y ya sabemos que es
un número, hacemos el MODulo a 23, y después, teniendo una variable tipo
string con todas las letras la posición que indique su valor, tan solo
tenemos que hacer un MID de esa cadena con el resultado del MODulo.
Bueno, lo importante es hacerlo, pero espero que te ayude a tenerlo más
claro en cualquier lenguaje.
Saludos,
Alex López
Lo que propone Miguel es algo así:
' Calcula la letra del nif a partir del dni
Function nif(dni As Long) As String
nif = Mid("TRWAGMYFPDXBNJZSQVHLCKE", dni Mod 23 + 1, 1)
End Function
En C todavía es más directo:
char nif(long dni)
{
return "TRWAGMYFPDXBNJZSQVHLCKE"[dni%23];
}
De todos modos el formato del NIF es más complejo, puesto que a parte de
personas físicas están las personas jurídicas. La documentación del
algoritmo se puede conseguir del Ministerio de Hacienda.
Estoy pasando algunas rutinas que tenía hechas en clipper al Visual
Basic. Entre otras cosas: chequeo del nif, cálculo del código de control
de cuentas bancarias, y una rutina para expresar literalmente un número
(muy útil en documentos contables).
A quien le interese estas rutinas las puede pillar de:
<http://epari.home.ml.org/rutinas/> en Visual Basic y Clipper.
Salu2,
--
<ep...@mackeros.com> ICQ-UIN-5443987 ____ ___ __ ___ __
<http://epari.home.ml.org> \\_ ||_\ //_\ ||_\ ||
Public PGP key available at PGP servers //__ || || | || \ ||
'rellena la matriz
x(0) = 6
x(1) = 3
x(2) = 7
x(3) = 9
x(4) = 10
x(5) = 5
x(6) = 8
x(7) = 4
x(8) = 2
x(9) = 1
'Calcula el primer dídito
If Len(Entidad) < 4 Then
Entidad = String(4 - Len(Entidad), "0") & Entidad
End If
If Len(Sucursal) < 4 Then
Sucursal = String(4 - Len(Sucursal), "0") & Sucursal
End If
CadEntidadSucursal = Entidad & Sucursal
'invertir la cadena de entidad + sucursal
CadenaInversa = ""
For i = 0 To Len(CadEntidadSucursal) - 1
CadenaInversa = CadenaInversa & Mid(CadEntidadSucursal,
Len(CadEntidadSucursal) - i, 1)
Next i
numInt = 0
For i = 0 To Len(CadenaInversa) - 1
numMid = Val(Mid(CadenaInversa, i + 1, 1))
numInt = numInt + numMid * x(i)
Next i
numInt = (11 - (numInt Mod 11))
'casos particulares
If numInt = 10 Then numInt = 1
If numInt = 11 Then numInt = 0
'este es el primer dígito
CalculaDigitoControl = Trim(Str(numInt))
'calcula el segundo dígito
If Len(Cuenta) < 10 Then
Cuenta = String(10 - Len(Cuenta), "0") & Cuenta
End If
'invertir la cadena de Cuenta
CadenaInversa = ""
For i = 0 To Len(Cuenta) - 1
CadenaInversa = CadenaInversa & Mid(Cuenta, Len(Cuenta) - i, 1)
Next i
numInt = 0
For i = 0 To Len(CadenaInversa) - 1
numMid = Val(Mid(CadenaInversa, i + 1, 1))
numInt = numInt + numMid * x(i)
Next i
numInt = (11 - (numInt Mod 11))
'casos particulares
If numInt = 10 Then numInt = 1
If numInt = 11 Then numInt = 0
'este es el segundo dígito
CalculaDigitoControl = CalculaDigitoControl & Trim(Str(numInt))
End Function
Espero que te sirva. Saludos. Elier
elie...@colon.net
Miguel Angel Sobrino Lozano escribió en mensaje
<6jktg8$84q$1...@talia.mad.ibernet.es>...