Validar CUI del DPI

Script de ejemplo de cómo validar el Código Único de Identificación (CUI) impreso en el Documento Personal de Identificación (DPI) de los ciudadanos de Guatemala.

HTML

<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<div class="container">
    <h1>Validaci&oacute;n de CUI <small>utilizado en Guatemala</small></h1>
    
    <p>El <strong>C&oacute;digo &Uacute;nico de Identificaci&oacute;n</strong> (CUI) es el n&uacute;mero con el que se identifican los ciudadados en Guatemala y se ecuentra impreso en su <strong>Documento Personal de Identificaci&oacute;n</strong> (DPI).</p>
    
    <blockquote><p class="small">El presente formulario permite <em>verificar si el CUI escrito es v&aacute;lido</em>, sin embargo la validez del n&uacute;mero no implica que exista un ciudadano que se identifique con dicho n&uacute;mero.</p></blockquote>
    
    <div class="row">
        <div class="col-md-12">
            <form role="form">
                <div class="form-group has-feedback">
                    <label for="cui" class="control-label">CUI:</label>
                    <input type="text" class="form-control" id="cui" placeholder="Ingrese CUI" />
                    <span class="glyphicon form-control-feedback"></span>
                </div>
            </form>
        </div>
    </div>
</div>

JavaScript

function cuiIsValid(cui) {
    var console = window.console;
    if (!cui) {
        console.log("CUI vacío");
        return true;
    }

    var cuiRegExp = /^[0-9]{4}\s?[0-9]{5}\s?[0-9]{4}$/;

    if (!cuiRegExp.test(cui)) {
        console.log("CUI con formato inválido");
        return false;
    }

    cui = cui.replace(/\s/, '');
    var depto = parseInt(cui.substring(9, 11), 10);
    var muni = parseInt(cui.substring(11, 13));
    var numero = cui.substring(0, 8);
    var verificador = parseInt(cui.substring(8, 9));
    
    // Se asume que la codificación de Municipios y 
    // departamentos es la misma que esta publicada en 
    // http://goo.gl/EsxN1a

    // Listado de municipios actualizado segun:
    // http://goo.gl/QLNglm

    // Este listado contiene la cantidad de municipios
    // existentes en cada departamento para poder 
    // determinar el código máximo aceptado por cada 
    // uno de los departamentos.
    var munisPorDepto = [ 
        /* 01 - Guatemala tiene:      */ 17 /* municipios. */, 
        /* 02 - El Progreso tiene:    */  8 /* municipios. */, 
        /* 03 - Sacatepéquez tiene:   */ 16 /* municipios. */, 
        /* 04 - Chimaltenango tiene:  */ 16 /* municipios. */, 
        /* 05 - Escuintla tiene:      */ 13 /* municipios. */, 
        /* 06 - Santa Rosa tiene:     */ 14 /* municipios. */, 
        /* 07 - Sololá tiene:         */ 19 /* municipios. */, 
        /* 08 - Totonicapán tiene:    */  8 /* municipios. */, 
        /* 09 - Quetzaltenango tiene: */ 24 /* municipios. */, 
        /* 10 - Suchitepéquez tiene:  */ 21 /* municipios. */, 
        /* 11 - Retalhuleu tiene:     */  9 /* municipios. */, 
        /* 12 - San Marcos tiene:     */ 30 /* municipios. */, 
        /* 13 - Huehuetenango tiene:  */ 32 /* municipios. */, 
        /* 14 - Quiché tiene:         */ 21 /* municipios. */, 
        /* 15 - Baja Verapaz tiene:   */  8 /* municipios. */, 
        /* 16 - Alta Verapaz tiene:   */ 17 /* municipios. */, 
   ...