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