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:
/// Calculate letter of DNI ///### Cálculo de letra de un número NIE La segunda función calcula una letra de NIE usando la primera función.
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 }
/// Calculate letter of NIE ///### Validación de un DNI La tercera función valida un DNI usando la primera función.
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 NIE La última función valida un NIE utilizando la segunda 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 }
///Cualquier comentario para mejorar será bienvenido!!! Saludos ;)
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 }