miércoles, 23 de junio de 2010

Verificador de Cédula...VB.NET

Este es un algoritmo que hice hace poco, y me parece interesante compartirlo con ustedes, es para verificar la Cédula de Identidad de URUGUAY, solo sirve para este país, debido al tamaño del número y como se lo descompone...

Es bien sencillo, espero que lo disfruten, y me corrijan algún error...

Aclaro que no estan controladas las excepciones, ya que lo hago desde afuera...

Public Function Verif_CI(ByVal ci_cadena As String) As Boolean
Dim ciVec(7), result(7), NumComprobador(7), sumatoria As Integer
Dim resto, Resto_sumatoria, ccc, ccc_Sumatoria As Short
Dim ok As Boolean

ccc = 0
ccc_Sumatoria = 0

'------------------------------------------------------
'Preestablecemos los valores del número comprobador..
NumComprobador(0) = 2
NumComprobador(1) = 9
NumComprobador(2) = 8
NumComprobador(3) = 7
NumComprobador(4) = 6
NumComprobador(5) = 3
NumComprobador(6) = 4
'------------------------------------------------------

For i = 0 To 7
'Pasamos cada subíndice de la cadena, a un dígito...De esta forma vectorizamos el número...

ciVec(i) = Val(ci_cadena(i)) 'Hacer un respaldo...para conservar los valores de la cédula ingresada

'Hacemos la operación pertinente con cada dígito de la Cédula..
result(i) = ciVec(i) * NumComprobador(i)

If result(i) >= 10 Then 'Verificamos que el número sea de una sola cifra, de lo contrario Hacemos lo siguiente...
'Verificamos el valor del Modulo..de dividir el resultado entre 10..
resto = result(i) Mod 10
ccc = 0
While resto > 0
result(i) -= 1
ccc += 1
'Actualizamos RESTO
resto = result(i) Mod 10
End While
result(i) = ccc
End If
sumatoria += result(i)
Next

'Una vez obtenida la SUMATORIA (que es lo importante de todo el procedimiento anterior)...
'Buscamos el numero que sea mayor al mismo, que termine en cero, por ejemplo, si sumatoria = 48, el número que buscamos es 50.
Resto_sumatoria = sumatoria Mod 10
While Resto_sumatoria > 0
sumatoria += 1
ccc_Sumatoria += 1
'Actualizamos RESTO_SUMATORIA
Resto_sumatoria = sumatoria Mod 10
End While

'Confirmar que el número es correcto o no...
If ccc_Sumatoria = Val(ci_cadena(7)) Then
ok = True
Else
ok = False
End If

'Avisar que el número ingresado, no es válido
If ok = False Then
Console.WriteLine("")
Console.WriteLine("La C.I. ingresada NO es válida..Lo correcto sería ""########"".")
Console.WriteLine("")
End If

Return ok

End Function

3 comentarios:

Anónimo dijo...

Estas liberando codigo gurí eso no se hace... jeje

Anónimo dijo...

Gracias, super útil y bien explicado!

Chrdls dijo...

Para cedulas de 6 digitos ejemplos 790.890-5 no sirve el código por lo que ví.
No lo has actualizado y optimizado para estops casos?
Supongo que habría que agregarle un 0 al principio.
Gracias, excelente trabajo.