Diferencia entre revisiones de «Algoritmia/Algoritmo para obtener la letra del NIF»

Contenido eliminado Contenido añadido
Añadida la versión en C# que usa expresiones regulares. Corregido el código de C# original ya que las constantes deben ser declaradas en mayúsculas.
Línea 186:
 
=== [[C sharp NET|C#]] ===
Corrección comprobada con datos reales:
* El DNI esta compuesto de 9 caracteres 8digitos8 dígitos+Letra.
* El NIE esta compuesto de 9 caracteres Letra+7digitos+Letra, debe tenerse esto encuenta al realizar las validaciones de tamaño.
En la función C#(la única que he testeado) en las comparaciones longitud y conversión a entero, debe poner (nie.Length != 9) y (!int.TryParse(nie.Substring(1,7), out n) o jamas aceptara un NIE real como valido.
<source lang="csharp">
/// <summary> Tabla de asignación. </summary>
public const string CorrespondenciaCORRESPONDENCIA = "TRWAGMYFPDXBNJZSQVHLCKE";
 
/// <summary> Genera la letra correspondiente a un DNI. </summary>
Línea 203 ⟶ 207:
}
return CorrespondenciaCORRESPONDENCIA[n % 23];
}
 
Línea 222 ⟶ 226:
{
case 'X':
return CorrespondenciaCORRESPONDENCIA[n % 23];
case 'Y':
return CorrespondenciaCORRESPONDENCIA[(10000000 + n) % 23];
case 'Z':
return CorrespondenciaCORRESPONDENCIA[(20000000 + n) % 23];
default:
return '\0';
}
}
</source>
 
=== [[C sharp NET|C#]] (versión mejorada con expresiones regulares) ===
Versión mejorada que usa [https://es.wikipedia.org/wiki/Expresi%C3%B3n_regular expresiones regulares] para comprobar que el DNI está compuesto por 8 dígitos y que el nie está compuesto por el caracter 'X', 'Y' o 'Z' (independientemente de que sea en mayúsculas o minúsculas) seguido de 7 dígitos.
 
<source lang="csharp">
/// <summary> Tabla de asignación. </summary>
public const string CORRESPONDENCIA = "TRWAGMYFPDXBNJZSQVHLCKE";
 
/// <summary> Genera la letra correspondiente a un DNI. </summary>
/// <param name="dni"> DNI a procesar. </param>
/// <returns> Letra correspondiente al DNI. </returns>
static public char LetraNIF(string dni)
{
Match match = new Regex(@"\b(\d{8})\b").Match(dni);
if (match.Success)
return CORRESPONDENCIA[int.Parse(dni) % 23];
else
throw new ArgumentException("El DNI debe contener 8 dígitos.");
}
 
/// <summary> Genera la letra correspondiente a un NIE. </summary>
/// <param name="nie"> NIE a procesar. </param>
/// <returns> Letra correspondiente al NIE. </returns>
static public char LetraNIE(string nie)
{
Match match = new Regex(@"\b([X|Y|Z|x|y|z])(\d{7})\b").Match(nie);
if (match.Success)
{
int n = int.Parse(match.Groups[2].Value); // también se podría haber usado como parámetro nie.Substring(1, 7)
switch (char.ToUpper(nie[0]))
{
case 'X':
return CORRESPONDENCIA[n % 23];
case 'Y':
return CORRESPONDENCIA[(10000000 + n) % 23];
case 'Z':
return CORRESPONDENCIA[(20000000 + n) % 23];
default:
return '\0';
}
}
else
throw new ArgumentException("El NIE debe comenzar con la letra X, Y o Z seguida de 7 dígitos.");
}
</source>
 
Línea 426 ⟶ 474:
DCL (MOD) BUILTIN;
</source>
 
== Nota en caso DNI y NIE Prácticos función c# ==
Corrección comprobada con datos reales:
El DNI esta compuesto de 9 caracteres 8digitos+Letra.
El NIE esta compuesto de 9 caracteres Letra+7digitos+Letra, debe tenerse esto encuenta al realizar las validaciones de tamaño.
En la función C#(la única que he testeado) en las comparaciones longitud y conversión a entero, debe poner (nie.Length != 9) y (!int.TryParse(nie.Substring(1,7), out n) o jamas aceptara un NIE real como valido.
 
== Enlaces externos ==