la verdad es que hace tiempo que no entro por aquí y quería aportar algo. Por necesidad he tenido que hacer unas funciones para validar CIF /NIF y NIE. Las dejo y espero que os sirvan. LA del CIF es una calcamonía traducida a Autoit de la que hay en Wikipedia para VBA. La del NIF / NIE pues es mía conforme a las reglas de validación. Las funciones son:
Func EsValidoCIF ($identificador)
Func EsValidoNIFNIE ($identificador)
Y devuelven un boleano TRUE si el CIF-NIF-NIE (A80466006) es correcto.
Espero que a alguien le sirvan y las usen.....
Código: Seleccionar todo
Func EsValidoCIF($identificador)
Dim $A
Dim $B
Dim $C
Dim $CIF
Dim $CIFDIGITO
Dim $i
Dim $Valido
Dim $Digito
Dim $letras
$A = 0
$B = 0
$Valido = False
if StringLen($identificador) <> 9 then return $valido
if not StringIsAlNum($identificador) then return $valido
$CIF = StringMid($identificador, 2, 7) ;se obtienen los dígitos centrales
$CIFDIGITO = StringRight($identificador, 1) ;dígito de control
For $i = 1 To 6 Step 2
$A = $A + StringMid($CIF, $i + 1, 1) ;Suma de posiciones pares
$C = 2 * StringMid ($CIF, $i, 1) ;Doble de posiciones impares
$B = $B + Mod($C ,10) + Int($C / 10) ;Suma de digitos de doble de pares
Next
;para obtener el cálculo de la cifra de la séptima posición que no se trata
;en el bucle
$B = $B + (mod((2 * StringMid($CIF, 7, 1)),10) + Int((2 * stringMid($CIF, 7, 1)) / 10))
;se obtiene la unidad de la cifra total
$C = Mod((10 - mod(($A + $B) ,10)) , 10)
$aletras = ("J|A|B|C|D|E|F|G|H|I")
$letras = StringSplit("J|A|B|C|D|E|F|G|H|I","|",2)
$AA = StringLeft($identificador, 1)
Select
Case $AA = "K" or $AA = "P" or $AA = "R" or $AA = "Q" or $AA = "S" or $AA = "W"
$Digito = $letras[$C]
Case $AA = "A" or $AA = "B" or $AA = "E" or $AA = "H" or $AA = "J" or $AA = "U" or $AA = "V"
$Digito = $C
Case Else
If IsNumber($CIFDIGITO) Then
$Digito = $C
Else
$Digito = $letras[$C]
EndIf
EndSelect
if $CIFDIGITO = $Digito then $Valido = True
return $Valido
EndFunc
Func EsValidoNIFNIE($identificador)
$valido = True
$ultimoDigito = stringmid($identificador,StringLen($identificador),1)
If Not StringIsAlNum($identificador) Then
$valido = False
ConsoleWrite("1")
Elseif StringLen($identificador)<> 9 then
$valido = False
ConsoleWrite("2")
ElseIF ObtieneLetraNIFNIE($identificador) <> $ultimoDigito then
$valido = False
ConsoleWrite(ObtieneLetraNIFNIE($identificador))
EndIf
Return $valido
EndFunc
Func ObtieneLetraNIFNIE($identificador)
; Tipo 11111111H
Dim $Letra
; Identificamos si es NIF o NIE
$primerDigito = StringUpper(StringMid($identificador,1,1))
$Letras = "T|R|W|A|G|M|Y|F|P|D|X|B|N|J|Z|S|Q|V|H|L|C|K|E"
$aLetras = StringSplit($Letras,"|",2)
if IsNumber($primerDigito) then
; realmente no hacemos nada :-Ping
; lo dejo me gusta verlo así.
ElseIf $primerDigito = "X" then
$identificador = StringReplace($identificador,"X","")
ElseIf $primerDigito = "Y" then
$identificador = StringReplace($identificador,"Y","1")
ElseIf $primerDigito = "Z" then
$identificador = StringReplace($identificador,"Z","2")
EndIf
$pos = Mod($identificador,23)
$Letra = $aLetras[$pos]
Return $Letra
EndFunc