Generador de NIF/NIE

En el blog anterior, http://alskare.wordpress.com, un día se me ocurrió hacer una rutina que permitiese validar NIF, NIE y CIF . Sí, todo a la vez, así evitamos al usuario que tenga que introducir el tipo de documento. Por cierto, un día de estos tengo que ordenar el código, acabar de arreglarlo y dejarlo aquí. Bueno, el caso es que, desde que colgué ese post, uno de los mensajes que he recibido más a menudo hace referencia a ver si conocía algún lugar en el que existiese algún tipo de “generador” de NIFs para hacer pruebas.

Como me he comprometido a escribir un mínimo de un post quincenal, después de la broma de la presentación se me ha ocurrido que este podría ser un inicio como otro cualquiera, así que ahí queda.

La rutina, como puede comprobarse incluye tres métodos públicos que permiten diferenciar entre NIF y NIE (dependiendo de las pruebas se puede hacer uso de uno u otro). Además, he incluido un nuevo método que obtiene una lista de ambos tipos de documentos.

 

   1: using System;
   2: using System.Collections.Generic;
   3:  
   4: namespace JnSoftware.Generadores
   5: {
   6:  
   7:     /// <summary>
   8:     /// Generador de NIF/NIE al azar.
   9:     /// </summary>
  10:     public class NifNies
  11:     {
  12:  
  13:         Random semilla;
  14:         List<string> retVal;
  15:  
  16:         public NifNies()
  17:         {
  18:             semilla = new Random(DateTime.Now.Millisecond);
  19:         }
  20:  
  21:  
  22:         /// <summary>
  23:         /// Obtiene una lista de strings con <paramref name="numDocuments"/> NIFs aleatorios
  24:         /// </summary>
  25:         public List<string> GetNIFs(int numDocuments)
  26:         {
  27:             retVal = new List<string>(numDocuments);
  28:             for (int i = 0; i < numDocuments; i++)
  29:                 retVal.Add(getNif());
  30:             return retVal;
  31:         }
  32:  
  33:  
  34:         /// <summary>
  35:         /// Obtiene una lista de strings con <paramref name="numDocuments"/> NIFs aleatorios
  36:         /// </summary>
  37:         public List<string> GetNIEs(int numDocuments)
  38:         {
  39:             retVal = new List<string>(numDocuments);
  40:             for (int i = 0; i < numDocuments; i++)
  41:                 retVal.Add(getNie());
  42:             return retVal;
  43:         }
  44:  
  45:         
  46:         /// <summary>
  47:         /// Obtiene una lista de strings
  48:         /// </summary>
  49:         /// <param name="numNifs">Número de NIFs aleatorios que contendrá la lista</param>
  50:         /// <param name="numNies">Número de NIEs aleatorios que contendrá la lista</param>
  51:         public List<string> GetDocuments(int numNifs, int numNies)
  52:         {
  53:             // Es curioso. Primero he intentado:
  54:             // retVal = GetNIFs(numNifs);
  55:             // retVal.AddRange(GetNIEs(numNies));
  56:             // Pero sólo devuelve los Nies
  57:  
  58:             List<string> nies = GetNIEs(numNies);
  59:             retVal = GetNIFs(numNifs);
  60:             retVal.AddRange(nies);
  61:             return retVal;
  62:         }
  63:  
  64:  
  65:         /// <summary>
  66:         /// Obtiene un número de DNI
  67:         /// </summary>
  68:         /// <returns>
  69:         /// Un número de DNI consta de 7 dígitos + 1 carácter de control
  70:         /// </returns>
  71:         private string getNif()
  72:         {
  73:             int numDNI = semilla.Next(1000, 100000000);
  74:             return numDNI.ToString("00000000") + letraDNI(numDNI);
  75:         }
  76:  
  77:  
  78:         /// <summary>
  79:         /// Obtiene un número de NIE
  80:         /// </summary>
  81:         /// <returns>
  82:         /// Un NIE consta de un carácter (Y o X) + 6 dígitos + Carácter de control
  83:         /// </returns>
  84:         private string getNie()
  85:         {
  86:             int numDNI = semilla.Next(1000, 10000000);
  87:             return letraNie() + numDNI.ToString("0000000") + letraDNI(numDNI);
  88:         }
  89:  
  90:  
  91:         /// <summary>
  92:         /// Obtiene una letra aleatoria para el NIE
  93:         /// </summary>
  94:         private char letraNie()
  95:         {
  96:             string nie = "XY";
  97:             return nie[semilla.Next(0,2)];
  98:         }
  99:  
 100:  
 101:         /// <summary>
 102:         /// Cálculo de la letra del DNI/NIF
 103:         /// </summary>
 104:         private string letraDNI(int dni)
 105:         {
 106:             int indice = dni % 23;
 107:             return "TRWAGMYFPDXBNJZSQVHLCKET"[indice].ToString();
 108:         }
 109:     }
 110:  
 111: }

 

Como siempre, confío sea de utilidad. A mí me ha servidor bastante cuando he tenido que crear “datos de pruebas” en las bases de datos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *