Algoritmos de Dígito Verificador
A continuación presentamos (en formato de lenguaje GeneXus) el algoritmo de validación de dígito verificador de RUT:
&EsValido = False
/*
Además debe controlarse que:
- Las dos primeras posiciones estén en el rango 01 a 21.
- De la 3a. a la 8va. posición debe ser distinto de 000000
- Las posiciones 9a. y 10a. deben ser 00
*/
If &RUT.Substring(1,2).ToNumeric() <= 21 and &RUT.Substring(1,2).ToNumeric() > 0 and
&RUT.Substring(3,6).Trim() <> '000000' and
&RUT.Substring(9,2).Trim() = '00' and
(&RUT.Trim().Length() = 11 or &RUT.Trim().Length() = 12)
&EsValido = True
EndIf
If &EsValido
&Factores.Add(4)
&Factores.Add(3)
&Factores.Add(2)
&Factores.Add(9)
&Factores.Add(8)
&Factores.Add(7)
&Factores.Add(6)
&Factores.Add(5)
&Factores.Add(4)
&Factores.Add(3)
&Factores.Add(2)
//2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4
&X = 1
For &Factor in &Factores
&Suma += &RUT.Substring(&X,1).ToNumeric() * &Factor
&X += 1
EndFor
&Resto = Mod(&Suma,11)
&Resta = 11 - &Resto
&EsValido = False
Do Case
Case &Resta < 10
&Digito = &Resta
Case &Resta = 11
&Digito = 0
Case &Resta = 10
&Digito = -1
EndCase
If &Digito >= 0
If &RUT.Trim().Length() = 12
If &RUT.Substring(12,1).ToNumeric() = &Digito
&EsValido = True
EndIf
EndIf
Else
If &RUT.Trim().Length() = 11
&EsValido = True
EndIf
EndIf
EndIf
A continuación presentamos (en formato de lenguaje GeneXus) el algoritmo de validación de dígito verificador de Cédula de Identidad:
&EsValido = False
If &CedulaIn.Length() > 6
&Cedula = &CedulaIn.Trim().PadLeft(8, '0')
&DigitoVerificador = &Cedula.Substring(8,1).ToNumeric()
&a1 = &Cedula.Substring(1,1).ToNumeric()
&a2 = &Cedula.Substring(2,1).ToNumeric()
&a3 = &Cedula.Substring(3,1).ToNumeric()
&a4 = &Cedula.Substring(4,1).ToNumeric()
&a5 = &Cedula.Substring(5,1).ToNumeric()
&a6 = &Cedula.Substring(6,1).ToNumeric()
&a7 = &Cedula.Substring(7,1).ToNumeric()
&b1 = Mod(&a1 * 2, 10)
&b2 = Mod(&a2 * 9, 10)
&b3 = Mod(&a3 * 8, 10)
&b4 = Mod(&a4 * 7, 10)
&b5 = Mod(&a5 * 6, 10)
&b6 = Mod(&a6 * 3, 10)
&b7 = Mod(&a7 * 4, 10)
&t1 = &b1 + &b2 + &b3 + &b4 + &b5 + &b6 + &b7
&t2 = Mod(&t1, 10)
&chd1 = (&t2 - 10) * -1
&chd1 = Mod(&chd1, 10)
If &chd1 = &DigitoVerificador
&EsValido = True
EndIf
EndIf