<?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>Forem: Fernando Silva</title>
    <description>The latest articles on Forem by Fernando Silva (@fdograph).</description>
    <link>https://forem.com/fdograph</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F564364%2F6803460a-de7b-4044-850c-7c71bec2cbb7.jpeg</url>
      <title>Forem: Fernando Silva</title>
      <link>https://forem.com/fdograph</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/fdograph"/>
    <language>en</language>
    <item>
      <title>Cómo validar un R.U.T. Chileno</title>
      <dc:creator>Fernando Silva</dc:creator>
      <pubDate>Sun, 17 Apr 2022 14:25:45 +0000</pubDate>
      <link>https://forem.com/fdograph/como-validar-un-rut-chileno-5335</link>
      <guid>https://forem.com/fdograph/como-validar-un-rut-chileno-5335</guid>
      <description>&lt;p&gt;Si eres un desarrollador de software trabajando en Chile tarde o temprano tendrás que implementar algún tipo de validación de un RUT Chileno, ya sea para un formulario de contacto, compras, creación de un usuario o para registrar datos de pago. En este artículo voy a explicar cómo se compone un RUT, cuál es el algoritmo que se usa para obtener un dígito verificador y como implementar su validación en Javascript/Typescript de manera agnóstica a cualquier framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qué es un R.U.T.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;El RUT o &lt;a href="https://es.wikipedia.org/wiki/Rol_%C3%9Anico_Tributario" rel="noopener noreferrer"&gt;Rol Único Tributario&lt;/a&gt; es un número único para cada persona natural o jurídica en Chile&lt;/strong&gt;, similar al &lt;a href="https://www.ssa.gov/ssnumber/" rel="noopener noreferrer"&gt;SSN&lt;/a&gt; en Estados Unidos o al &lt;a href="https://www.government.nl/topics/personal-data/citizen-service-number-bsn" rel="noopener noreferrer"&gt;BSN&lt;/a&gt; en Holanda. Su función es ayudar a identificar a una persona o ente jurídico de manera estándar a través de diferentes servicios públicos o privados&lt;/p&gt;

&lt;p&gt;El formato del RUT tiene la forma &lt;code&gt;XX.XXX.XXX-Y&lt;/code&gt; en donde &lt;code&gt;X&lt;/code&gt; es un dígito entre &lt;code&gt;0-9&lt;/code&gt;, esta sección suele llamarse &lt;strong&gt;"Número" o "Dígitos"&lt;/strong&gt; mientras que &lt;code&gt;Y&lt;/code&gt; puede ser un dígito entre &lt;code&gt;0-9&lt;/code&gt; o la letra &lt;code&gt;K&lt;/code&gt;, este último símbolo se llama &lt;strong&gt;"Verificador" o "Dígito verificador"&lt;/strong&gt; y este &lt;strong&gt;se calcula usando un algoritmo conocido como "Módulo 11"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsd6qyzl5scvqzfa0gwt9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsd6qyzl5scvqzfa0gwt9.png" alt="Composición de un RUT Chileno mostrando las dos partes; El Número y el Dígito verificador"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Módulo 11
&lt;/h2&gt;

&lt;p&gt;Este es un algoritmo para calcular un &lt;a href="https://es.wikipedia.org/wiki/C%C3%B3digo_de_control" rel="noopener noreferrer"&gt;Código de Control&lt;/a&gt; los cuales generalmente consisten en uno o más caracteres numéricos o alfabéticos añadidos al dato original. Algunos de los ejemplos de uso frecuentes son los números de identificación personal, códigos de barras, tarjetas de crédito y códigos bancarios.&lt;/p&gt;

&lt;p&gt;El cálculo del Módulo 11 es el siguiente:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A cada dígito del número base se le asigna un factor de chequeo ponderado. Dicho factor será 2 para el dígito menos significativo (el que está más a la derecha) y, en orden, 3, 4, 5, 6, 7 para los siguientes. Si hubiere más de 6 dígitos, la secuencia se repetirá, de modo que el séptimo dígito se multiplicará por 2, el octavo por 3, etcétera.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cada dígito del número base se multiplica por el factor de chequeo asignado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Se suman los resultados de todas las multiplicaciones.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Al resultado de la suma se le calcula el módulo 11 (de ahí el nombre del método), es decir, el resto de la división entera entre 11.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A 11 se le resta el módulo calculado en el punto anterior. Si el resultado de la resta es &amp;lt; 10, dicho resultado es el dígito de control que buscábamos. Si el resultado es 11 el dígito de control es 0 y si el resultado es 10 el dígito de control resultante es 1.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Específicamente para el cálculo del RUT cuando el resultado del algoritmo es 10 el carácter de control es la letra "K".&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;Con estos pasos podemos proceder a implementar el algoritmo de la siguiente manera:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;calcularVerificador&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&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="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mul&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;charAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;mul&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mul&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;mul&lt;/span&gt; &lt;span class="o"&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;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;mul&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&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;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;k&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  En la práctica
&lt;/h2&gt;

&lt;p&gt;Si bien el algoritmo del Módulo 11 es capaz de calcular el dígito verificador correcto para cualquier set de números &lt;strong&gt;algunas de estas soluciones corresponden a RUTs que no son válidos aunque su dígito verificador es correcto&lt;/strong&gt; como por ejemplo &lt;code&gt;11.111.111-1&lt;/code&gt;, &lt;code&gt;22.222.222-2&lt;/code&gt; ó &lt;code&gt;99.999.999-9&lt;/code&gt;. Es por esto que a la hora de implementar una validación en una UI o API no podemos confiar exclusivamente en el resultado de este algoritmo. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para implementar una validación de RUT más confiable tendremos que validar dígito verificador y que el patrón del número a validar no sea invalido usando una o más &lt;a href="https://en.wikipedia.org/wiki/Regular_expression" rel="noopener noreferrer"&gt;Expresiones Regulares&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Librería de validación en NPM
&lt;/h2&gt;

&lt;p&gt;Ya que el uso del RUT en diversos formularios y APIs online es extremadamente común no es de sorprenderse que &lt;a href="https://www.npmjs.com/search?q=rut" rel="noopener noreferrer"&gt;existan varios módulos en NPM&lt;/a&gt; que sean capaces de ofrecer validación de RUT, sin embargo, en mi experiencia estos suelen estar desactualizados y en su mayoría tienen una documentación muy deficiente. Es por esto que decidí crear &lt;a href="https://github.com/fdograph/rut-utilities" rel="noopener noreferrer"&gt;mi propio Módulo &lt;code&gt;@fdograph/rut-utilities&lt;/code&gt;&lt;/a&gt; usando Typescript y creando una &lt;a href="https://github.com/fdograph/rut-utilities/blob/master/README-es.md" rel="noopener noreferrer"&gt;documentación completa&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;@fdograph/rut-utilities&lt;/code&gt; Cuenta con un 100% de test coverage y está mantenido activamente.&lt;/p&gt;
&lt;h2&gt;
  
  
  Uso y ejemplos
&lt;/h2&gt;

&lt;p&gt;Para usar esta librería primero debes instalarla como dependencia a tu proyecto.&lt;/p&gt;

&lt;p&gt;Con NPM&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save&lt;/span&gt; @fdograph/rut-utilities


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;O con Yarn&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nv"&gt;$ &lt;/span&gt;yarn add @fdograph/rut-utilities


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Validación
&lt;/h3&gt;

&lt;p&gt;Para simplemente validar un RUT está la función &lt;code&gt;validateRut&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;validateRut&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@fdograph/rut-utilities&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;validateRut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;18585543-0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Esta función &lt;strong&gt;valida una cadena de RUT usando Módulo 11 y 2 expresiones regulares para evitar falsos positivos en RUTs inválidos.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Generación de dígito verificador
&lt;/h3&gt;

&lt;p&gt;Con esta librería también es posible calcular un Dígito Verificador correcto para cualquier número, esto ofrece mas flexibilidad al desarrollador para implementar una validación personalizada&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;calculateRutVerifier&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@fdograph/rut-utilities&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nf"&gt;calculateRutVerifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;18585543&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;
&lt;span class="o"&gt;&amp;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;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Formatear un RUT&lt;br&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;rut-utilites&lt;/code&gt; También exporta una función para dar formato a un RUT (válido o no). Para esto se ofrecen 3 formatos distintos; &lt;code&gt;DOTS&lt;/code&gt; Ej: &lt;code&gt;00.000.000k&lt;/code&gt;, &lt;code&gt;DOTS_DASH&lt;/code&gt; Ej: &lt;code&gt;00.000.000-k&lt;/code&gt; y &lt;code&gt;DASH&lt;/code&gt; Ej: &lt;code&gt;00000000-k&lt;/code&gt;, este último es el formato por defecto.&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;

&lt;p&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;formatRut&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;RutFormat&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@fdograph/rut-utilities&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nf"&gt;formatRut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;44.333.222-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;44333222-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nf"&gt;formatRut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;44333222-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;RutFormat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DOTS_DASH&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;44.333.222-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span class="nf"&gt;formatRut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;44333222-1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;RutFormat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DOTS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;44.333.2221&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Uso extendido&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;rut-utilities&lt;/code&gt; Exporta 11 métodos en total para ofrecer un set de herramientas que te permitan total flexibilidad a la hora de validar, formatear, generar y manipular RUTs. Estos métodos son:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Método&lt;/th&gt;
&lt;th&gt;Retorno&lt;/th&gt;
&lt;th&gt;Descripción&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;isRutLike&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Valida si el patrón una cadena corresponde a una cadena con forma de RUT valido&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;isSuspiciousRut&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Valida si el patrón una cadena corresponde a una cadena con forma de RUT "sospechoso". Ej: &lt;code&gt;11.111.111-1&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cleanRut&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Limpia una cadena quitando todos los caracteres que no pertenecen a un RUT válido (&lt;code&gt;0-9&lt;/code&gt;, &lt;code&gt;k&lt;/code&gt;, &lt;code&gt;K&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getRutDigits&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Retorna solo el "número` de un RUT sin el dígito verificador&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getRutVerifier&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Retorna solo el dígito verificador de un RUT sin el "número"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;calculateRutVerifier&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Usa el Módulo 11 para calcular el dígito verificador de un set de números&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;validateRut&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ejecuta una validación usando el Módulo 11 y expresiones regulares para verificar un RUT válido&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;formatRut&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Formatea una cadena con forma de RUT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;generateRut&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Genera un RUT válido al azar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;validateRutList&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Map&amp;lt;string, boolean&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Ejecuta &lt;code&gt;validateRut&lt;/code&gt; en una lista de RUTs y retorna un mapa de validación&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;deconstructRut&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{digits: string; verifier: string; }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Retorna un objecto con las partes del RUT dado&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Gracias!
&lt;/h2&gt;

&lt;p&gt;Muchas gracias por leer este artículo y mucha suerte implementando esta librería en tus proyectos :)&lt;/p&gt;

&lt;p&gt;Happy hacking.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>chile</category>
      <category>npm</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
