Hola a todos: En este artículo quiero compartir unas funciones con vosotros, que espero os sean útiles en algún momento. ### Definiciones **DNI**: Documento Nacional de Identidad. Se compone de diferentes series de números y letras, que acreditan la identidad y los datos personales del titular, así como la nacionalidad española. Ejemplo: 94494452X **NIE**: Número de Identificación Extranjero: Es un código para extranjeros en España. Si necesitas generar ejemplos, puedes generar ejemplos de DNI o NIE en el siguiente enlace: ### Cálculo de letra de un número DNI La primera función calcula la letra de un número DNI.
/// Calculate letter of DNI
/// 
pDni format: con 8 numbers ClassMethod GetLetterDni(pDni As %String) As %String {     set correspondence = $LISTBUILD("T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E")     set letter = ""     if (pDni '= "") & ($GET(pDni)?8N){         set num = (pDni # 23)+1         set letter = $LISTGET(correspondence,num)     }     quit letter }
### Cálculo de letra de un número NIE La segunda función calcula una letra de NIE usando la primera función.
/// Calculate letter of NIE
/// 
pNie format: 1 letter, 7 numbers ClassMethod GetLetterNie(pNie As %String) As %String {     set letter = ""     //Get the first value     set letter1 = $ZCONVERT($EXTRACT(pNie,1,1),"U")     //Cogemos el resto del Nie para su posterior uso     set num = $EXTRACT(pNie,2,8)     if (pNie '= "") & ($GET(pNie)?1U7N){         //If NIE starts with X, the X is replaced by the 0         if (letter1 = "X") { set dni = 0_num }         //If NIE starts with Y, the Y is replaced by the 1         elseif(letter1 = "Y") { set dni = 1_num }         //If NIE starts with Z, the Z is replaced by the 2         elseif (letter1 = "Z"){ set dni = 2_num }         //Calculates the letter         set letter = ..GetLetterDni(dni)     }     quit letter }
### Validación de un DNI La tercera función valida un DNI usando la primera función.
/// 
pDni format: 8 numbers, 1 letter ///
Dni OK ///
-1 Dni error ClassMethod ValidateDni(pDni As %String) As %Integer {     set response = -1     if (pDni '= "") & ($GET(pDni)?8N1U){         //Get the numbers         set auxNum = $EXTRACT(pDni,1,8)         //Get the letter         set auxLetter = $EXTRACT(pDni,9,9)         //Calculates letter of dni         set calculatedLetter = ..GetLetterDni(auxNum)         //If both letters are the same the DNI is valid         if (auxLetter = calculatedLetter) { set response = 0 }     }     quit response }
### Validación de un NIE La última función valida un NIE utilizando la segunda función.
/// 
pNie NIE format: 1 letter, 7 numbers, 1 letter ///
NIE OK ///
-1 NIE error ClassMethod ValidateNie(pNie As %String) As %Integer {     set response = -1     if (pNie '= "") & ($GET(pNie)?1U7N1U){         //Get the "numbers"         set auxNum = $EXTRACT(pNie,1,8)         //Get the first letter         set auxLetter = $EXTRACT(pNie,9,9)         set calculatedLetter = ..GetLetterNie(auxNum)         //Si ambas letras son iguales el DNI es valido         if (auxLetter = calculatedLetter) { set response = 0 }     }     quit response }
Cualquier comentario para mejorar será bienvenido!!! Saludos  ;)