<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Carlos</title>
    <description>The latest articles on DEV Community by Carlos (@cbsumastre).</description>
    <link>https://dev.to/cbsumastre</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4151992%2F9bca355b-a646-41e2-a289-c69268de7a44.png</url>
      <title>DEV Community: Carlos</title>
      <link>https://dev.to/cbsumastre</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cbsumastre"/>
    <language>en</language>
    <item>
      <title>Cómo se calcula la letra del DNI y del NIE (módulo 23, con código)</title>
      <dc:creator>Carlos</dc:creator>
      <pubDate>Wed, 30 Sep 2026 10:39:17 +0000</pubDate>
      <link>https://dev.to/cbsumastre/como-se-calcula-la-letra-del-dni-y-del-nie-modulo-23-con-codigo-3cmj</link>
      <guid>https://dev.to/cbsumastre/como-se-calcula-la-letra-del-dni-y-del-nie-modulo-23-con-codigo-3cmj</guid>
      <description>&lt;p&gt;Si alguna vez has validado un DNI en un formulario, o has necesitado datos de prueba para un entorno de test, te habrás preguntado de dónde sale esa letra final. No es aleatoria ni un truco: es un &lt;strong&gt;dígito de control&lt;/strong&gt; que se calcula con una operación muy simple. Vamos a verlo paso a paso y con código.&lt;/p&gt;

&lt;h2&gt;
  
  
  El algoritmo del DNI
&lt;/h2&gt;

&lt;p&gt;Un DNI son &lt;strong&gt;8 dígitos y una letra&lt;/strong&gt;. El Ministerio del Interior publica el algoritmo [1], y la letra se obtiene así:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Toma los 8 dígitos como un número entero.&lt;/li&gt;
&lt;li&gt;Calcula el &lt;strong&gt;resto de dividirlo entre 23&lt;/strong&gt; (módulo 23).&lt;/li&gt;
&lt;li&gt;Busca ese resto como posición en esta tabla de 23 letras:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TRWAGMYFPDXBNJZSQVHLCKE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La posición empieza en 0. El resto 0 es &lt;code&gt;T&lt;/code&gt;, el 1 es &lt;code&gt;R&lt;/code&gt;, el 2 es &lt;code&gt;W&lt;/code&gt;, y así hasta el 22, que es &lt;code&gt;E&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo
&lt;/h3&gt;

&lt;p&gt;DNI &lt;code&gt;12345678&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;12345678 mod 23 = 14&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;La posición 14 de la tabla es &lt;code&gt;Z&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;12345678Z&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un caso límite del cálculo: &lt;code&gt;00000000&lt;/code&gt; da resto 0, que es &lt;code&gt;T&lt;/code&gt;, así que &lt;code&gt;00000000T&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;No están todas las letras del alfabeto: faltan &lt;code&gt;I&lt;/code&gt;, &lt;code&gt;Ñ&lt;/code&gt;, &lt;code&gt;O&lt;/code&gt; y &lt;code&gt;U&lt;/code&gt;. No hay una explicación oficial fácil de encontrar. Estas son las que circulan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;I&lt;/code&gt; y &lt;code&gt;O&lt;/code&gt;:&lt;/strong&gt; en esto coinciden todas las fuentes. Se descartan porque se confunden con &lt;code&gt;1&lt;/code&gt; y &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Ñ&lt;/code&gt;:&lt;/strong&gt; hay dos versiones. Según el matemático Raúl Ibáñez (UPV/EHU), se quitó por los problemas con sistemas informáticos de otros países, que no tienen esa letra [3]. Según Wikipedia, para no confundirla con la &lt;code&gt;N&lt;/code&gt; [4].&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;U&lt;/code&gt;:&lt;/strong&gt; según Ibáñez, para quedarse en 23 letras. El 23 es primo, y eso es lo que permite detectar errores (lo vemos más abajo) [3].&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  El NIE: el mismo algoritmo con un paso previo
&lt;/h2&gt;

&lt;p&gt;El NIE (número de identidad de extranjero) tiene una letra inicial &lt;code&gt;X&lt;/code&gt;, &lt;code&gt;Y&lt;/code&gt; o &lt;code&gt;Z&lt;/code&gt;, siete dígitos y una letra final de control.&lt;/p&gt;

&lt;p&gt;Un poco de historia: al principio el NIE era una &lt;code&gt;X&lt;/code&gt; seguida de &lt;strong&gt;ocho&lt;/strong&gt; dígitos. La Orden INT/2058/2008 [2] fijó el formato actual de nueve caracteres, con una letra inicial, siete dígitos y un carácter de verificación. También estableció que, al agotarse la serie de la &lt;code&gt;X&lt;/code&gt;, se siguiera por orden alfabético. Por eso existen los NIE con &lt;code&gt;Y&lt;/code&gt; y con &lt;code&gt;Z&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para calcular la letra final [1]:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Sustituye la letra inicial por un dígito: &lt;code&gt;X → 0&lt;/code&gt;, &lt;code&gt;Y → 1&lt;/code&gt;, &lt;code&gt;Z → 2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Concatena ese dígito con los 7 dígitos: obtienes un número de 8 cifras.&lt;/li&gt;
&lt;li&gt;Aplica el mismo módulo 23 y la misma tabla.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Ejemplo
&lt;/h3&gt;

&lt;p&gt;NIE &lt;code&gt;X1234567&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;X → 0&lt;/code&gt;, así que el número es &lt;code&gt;01234567&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;1234567 mod 23 = 19&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;La posición 19 de la tabla es &lt;code&gt;L&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Resultado: &lt;code&gt;X1234567L&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con &lt;code&gt;Y1234567&lt;/code&gt; se calcula &lt;code&gt;11234567&lt;/code&gt;, y con &lt;code&gt;Z1234567&lt;/code&gt; se calcula &lt;code&gt;21234567&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  En código (TypeScript)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;LETTERS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;TRWAGMYFPDXBNJZSQVHLCKE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;NIE_PREFIX&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;X&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;Z&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Los usuarios escriben "12.345.678-z": quita espacios, puntos y guiones.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;normalize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;[\s&lt;/span&gt;&lt;span class="sr"&gt;.-&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;dniLetter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;digits&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;LETTERS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;digits&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isValidDni&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;(\d{8})([&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;])&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;dniLetter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;isValidNie&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sr"&gt;/^&lt;/span&gt;&lt;span class="se"&gt;([&lt;/span&gt;&lt;span class="sr"&gt;XYZ&lt;/span&gt;&lt;span class="se"&gt;])(\d{7})([&lt;/span&gt;&lt;span class="sr"&gt;A-Z&lt;/span&gt;&lt;span class="se"&gt;])&lt;/span&gt;&lt;span class="sr"&gt;$/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;normalize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nf"&gt;dniLetter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;NIE_PREFIX&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;isValidDni&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12345678Z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="nf"&gt;isValidDni&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12.345.678-z&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="nf"&gt;isValidDni&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12345678A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;span class="nf"&gt;isValidNie&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;X1234567L&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Un detalle práctico: normaliza siempre antes de validar. Es lo que hace &lt;code&gt;normalize&lt;/code&gt;. Si no, rechazarás documentos correctos escritos con puntos, guiones o en minúsculas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué valida y qué no
&lt;/h2&gt;

&lt;p&gt;La letra detecta &lt;strong&gt;errores de tecleo&lt;/strong&gt;. Si te equivocas en un dígito o intercambias dos cifras, la letra ya no cuadra, porque ninguno de esos cambios deja el mismo resto al dividir entre 23. Lo que no hace es comprobar que el documento &lt;strong&gt;exista&lt;/strong&gt;. &lt;code&gt;12345678Z&lt;/code&gt; es un DNI con formato y letra válidos, pero eso no dice nada de si pertenece a alguien.&lt;/p&gt;

&lt;p&gt;Esto tiene una consecuencia útil para testing: puedes generar miles de DNI con letra correcta que pasan cualquier validación de formato sin corresponder a personas reales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Probarlo sin escribir el código
&lt;/h2&gt;

&lt;p&gt;Si solo necesitas datos de prueba o comprobar un documento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://datamockseed.firstflip.es/generador/dni?utm_source=devto" rel="noopener noreferrer"&gt;Generador de DNI válido&lt;/a&gt;: números aleatorios y ficticios con la letra correcta.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://datamockseed.firstflip.es/validar/dni?utm_source=devto" rel="noopener noreferrer"&gt;Validador de DNI&lt;/a&gt;: te dice si la letra cuadra y, si no, cuál debería ser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los datos son ficticios. Úsalos para pruebas, QA, demos o seeds de base de datos, y nunca para hacerte pasar por nadie ni en trámites reales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resumen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Letra del DNI = &lt;code&gt;TRWAGMYFPDXBNJZSQVHLCKE[número mod 23]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;NIE = igual, cambiando &lt;code&gt;X/Y/Z&lt;/code&gt; por &lt;code&gt;0/1/2&lt;/code&gt; al principio.&lt;/li&gt;
&lt;li&gt;Solo detecta errores de escritura: no prueba que el documento exista.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fuentes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Ministerio del Interior. &lt;a href="https://www.interior.gob.es/opencms/es/servicios-al-ciudadano/tramites-y-gestiones/dni/calculo-del-digito-de-control-del-nif-nie/" rel="noopener noreferrer"&gt;Cálculo del dígito de control del NIF/NIE&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;BOE. &lt;a href="https://www.boe.es/buscar/doc.php?id=BOE-A-2008-12050" rel="noopener noreferrer"&gt;Orden INT/2058/2008, de 14 de julio&lt;/a&gt;, sobre el Número de Identidad de Extranjero (BOE núm. 170, de 15 de julio de 2008).&lt;/li&gt;
&lt;li&gt;Raúl Ibáñez. &lt;a href="https://culturacientifica.com/2022/01/12/un-codigo-detector-de-errores-la-letra-del-dni/" rel="noopener noreferrer"&gt;Un código detector de errores: la letra del DNI&lt;/a&gt;. Cuaderno de Cultura Científica, UPV/EHU, 2022.&lt;/li&gt;
&lt;li&gt;Wikipedia. &lt;a href="https://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal" rel="noopener noreferrer"&gt;Número de identificación fiscal&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>testing</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
