//Foundation 5 Foundation.libs.abide.settings.patterns.password = /^\w{0,200}$/; $(function(){ $(document).foundation({ abide: { patterns: { password: /^(.){4,200}$/, entero: /^[0-9]*$/ } }, reveal: { close_on_background_click: true, close_on_esc: true } }); }); // ======================== VALIDACION ======================== function lpad(texto, longitud, caracter) { while (texto.length < longitud) texto = caracter + texto; return texto; } function rpad(texto, longitud, caracter) { while (texto.length < longitud) texto += caracter; return texto; } /** * Valida el número de tarjeta de crédito. */ function validarNumeroTarjeta(numero_tarjeta) { var cadena = numero_tarjeta.toString().replace(/\s/g,''); var longitud = cadena.length; var suma = 0; if (cadena.indexOf("34") == 0 || cadena.indexOf("37") == 0) { return validarNumeroTarjetaAMEX(numero_tarjeta); } else { for (var i=0; i < longitud; i+=2) { var cifra = parseInt(cadena.charAt(i))*2; if (cifra > 9) { var cifra_cad = cifra.toString(); cifra = parseInt(cifra_cad.charAt(0)) + parseInt(cifra_cad.charAt(1)); } suma += cifra; } for (var i=1; i < longitud; i+=2) suma += parseInt(cadena.charAt(i)); if ((suma % 10) == 0) return true; } return false; } /** * Valida todo tipo de tarjetas de crédito. */ function isValidCreditCard(type, ccnum) { var re = null; if (type == "Visa") { // Visa: length 16, prefix 4, dashes optional. re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/; } else if (type == "MC") { // Mastercard: length 16, prefix 51-55, dashes optional. re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/; } else if (type == "Disc") { // Discover: length 16, prefix 6011, dashes optional. re = /^6011-?\d{4}-?\d{4}-?\d{4}$/; } else if (type == "AmEx") { // American Express: length 15, prefix 34 or 37. re = /^3[4,7]\d{13}$/; } else if (type == "Diners") { // Diners: length 14, prefix 30, 36, or 38. re = /^3[0,6,8]\d{12}$/; } if (re == null || !re.test(ccnum)) return false; // Remove all dashes for the checksum checks to eliminate negative numbers ccnum = ccnum.split("-").join(""); // Checksum ("Mod 10") // Add even digits in even length strings or odd digits in odd length strings. var checksum = 0; for (var i = (2 - (ccnum.length % 2)); i <= ccnum.length; i += 2) { checksum += parseInt(ccnum.charAt(i - 1)); } // Analyze odd digits in even length strings or even digits in odd length strings. for (var i = (ccnum.length % 2) + 1; i < ccnum.length; i += 2) { var digit = parseInt(ccnum.charAt(i - 1)) * 2; if (digit < 10) { checksum += digit; } else { checksum += (digit - 9); } } if ((checksum % 10) == 0) return true; else return false; } /** * Valida el número de tarjeta de crédito. */ function validarNumeroTarjetaAMEX(numero_tarjeta) { var cadena = numero_tarjeta.toString(); var respuesta = isValidCreditCard("AmEx", cadena); return respuesta; } /** * Valida el CNPJ * @param cnpj * @returns */ function checkCnpj(cnpj) { // Despejar Puntos var valor = cnpj.split(".").join(""); // Despejar Guión valor = valor.replace('-',''); //Despejar barra valor = valor.replace('/',''); // Aislar Cuerpo y Dígitos Verificadores cuerpo = valor.slice(0,-2); dv1 = valor.slice(-2,-1); dv2 = valor.slice(-1); // Formatear CNPJ cnpj.value = cuerpo + '-'+ dv1 +'' + dv2 // Si no cumple con el mínimo ej. (nn.nnn.nnn/nnnn) if(cuerpo.length < 12 || cuerpo.length>12) { return false; } sumaDig1 = 0; multiplo1 = 2; // Calcular dígito1 de los Digitos de Control for(let i=1;i<=cuerpo.length;i++) { // Obtener su Producto con el Múltiplo Correspondiente indexDv1 = multiplo1 * valor.charAt(cuerpo.length - i); // Sumar al Contador General sumaDig1 = sumaDig1 + indexDv1; if(multiplo1<9) { multiplo1 = multiplo1 + 1; } else { multiplo1= 2; } } // Calcular Dígito Verificador en base al Módulo 11 y calcular si es digito 0 dvEsperado1 = 11 - (sumaDig1 % 11); if (dvEsperado1 > 9) { dvEsperado1 = 0; } suma2 = 0; multiplo2 = 3; // Para cada dígito del Cuerpo for(let i=1;i<=cuerpo.length;i++) { // Obtener su Producto con el Múltiplo Correspondiente index2 = multiplo2 * valor.charAt(cuerpo.length - i); // Sumar al Contador General suma2 = suma2 + index2; if(multiplo2<9) { multiplo2 = multiplo2 + 1; } else { multiplo2 = 2; } } digitoEncontrado = dvEsperado1 * 2; suma2 = suma2 + digitoEncontrado; // Calcular Dígito Verificador en base al Módulo 11 dvEsperado2 = 11 - (suma2 % 11); if (dvEsperado2 > 9) { dvEsperado2 = 0; } if (dvEsperado1 == dv1 && dvEsperado2 == dv2) { return true; } else { return false; } } /** * Valida el CPF * @param cpf * @returns */ function checkCPF(cpf) { // Despejar Puntos var valor = cpf.split(".").join(""); // Despejar Guión valor = valor.replace('-',''); // Aislar Cuerpo y Dígitos Verificadores cuerpo = valor.slice(0,-2); dv1 = valor.slice(-2,-1); dv2 = valor.slice(-1); // Formatear CPF cpf.value = cuerpo + '-'+ dv1 // Si no cumple con el mínimo ej. (nnn.nnn.nnn) if(cuerpo.length < 9 || cuerpo.length>9) { return false; } sumaDig1 = 0; multiplo1 = 2; // Calcular dígito1 de los Digitos de Control for(let i=1;i<=cuerpo.length;i++) { // Obtener su Producto con el Múltiplo Correspondiente indexDv1 = multiplo1 * valor.charAt(cuerpo.length - i); // Sumar al Contador General sumaDig1 = sumaDig1 + indexDv1; multiplo1 = multiplo1 + 1; } // Calcular Dígito Verificador en base al Módulo 11 y calcular si es digito 0 dvEsperado1 = 11 - (sumaDig1 % 11); if (dvEsperado1 > 9) { dvEsperado1 = 0; } suma2 = 0; multiplo2 = 3; // Para cada dígito del Cuerpo for(let i=1;i<=cuerpo.length;i++) { // Obtener su Producto con el Múltiplo Correspondiente index2 = multiplo2 * valor.charAt(cuerpo.length - i); // Sumar al Contador General suma2 = suma2 + index2; multiplo2 = multiplo2 + 1; } digitoEncontrado = dvEsperado1 * 2; suma2 = suma2 + digitoEncontrado; // Calcular Dígito Verificador en base al Módulo 11 dvEsperado2 = 11 - (suma2 % 11); if (dvEsperado2 > 9) { dvEsperado2 = 0; } if (dvEsperado1 == dv1 && dvEsperado2 == dv2) { return true; } else { return false; } } /** * Valida el RUT * @param rut * @returns */ function checkRut(rut) { // Despejar Puntos var valor = rut.replaceAll('.',''); // Despejar Guión valor = valor.replaceAll('-',''); // Aislar Cuerpo y Dígito Verificador var cuerpo = valor.slice(0,-1); var dv = valor.slice(-1).toUpperCase(); // Formatear RUN rut.value = cuerpo + '-'+ dv // Si no cumple con el mínimo ej. (n.nnn.nnn) if(cuerpo.length < 7) { //rut.setCustomValidity("RUT Incompleto"); return false; } // Calcular Dígito Verificador var suma = 0; var multiplo = 2; // Para cada dígito del Cuerpo for(var i=1;i<=cuerpo.length;i++) { // Obtener su Producto con el Múltiplo Correspondiente var index = multiplo * valor.charAt(cuerpo.length - i); // Sumar al Contador General suma = suma + index; // Consolidar Múltiplo dentro del rango [2,7] if(multiplo < 7) { multiplo = multiplo + 1; } else { multiplo = 2; } } // Calcular Dígito Verificador en base al Módulo 11 var dvEsperado = 11 - (suma % 11); // Casos Especiales (0 y K) dv = (dv == 'K')?10:dv; dv = (dv == 0)?11:dv; // Validar que el Cuerpo coincide con su Dígito Verificador if(dvEsperado != dv) { //rut.setCustomValidity("RUT Inválido"); return false; } // Si todo sale bien, eliminar errores (decretar que es válido) return true; } /** * Valida el DNI * @param dni * @returns */ function checkNif(dni) { var numero var letr var letra var expresion_regular_dni var expresion_regular_nie expresion_regular_dni = /^\d{8}[a-zA-Z]$/; expresion_regular_nie = /^[XYZ][0-9]{7}[A-Z]$/; if(expresion_regular_dni.test (dni)) { numero = dni.substr(0,dni.length-1); letr = dni.substr(dni.length-1,1); numero = numero % 23; letra='TRWAGMYFPDXBNJZSQVHLCKET'; letra=letra.substring(numero,numero+1); if (letra!=letr.toUpperCase()) { return false; } return true; } else if(expresion_regular_nie.test (dni)) { let primerDigito = dni.substr(0,1); let primeraSuma = (primerDigito == "X") ? "0" : (primerDigito == "Y") ? "1" : "2"; numero = primeraSuma + dni.substr(1,dni.length-2); letr = dni.substr(dni.length-1,1); numero = numero % 23; letra='TRWAGMYFPDXBNJZSQVHLCKET'; letra=letra.substring(numero,numero+1); if (letra!=letr.toUpperCase()) { return false; } return true; } return false; } function checkRNC(rnc) { return (/^[0-9]+$/.test(rnc) && (rnc.length >=9 && rnc.length<=11)) } /** * Validates Polish pesel * @param pesel * @returns */ function checkPesel(pesel) { if (isNaN(parseInt(pesel)) || pesel.length != 11){ return false; } pesel = pesel.split('').map(function(n) { return parseInt(n); }); let year; let month; let day; let sum = 1 * pesel[0] + 3 * pesel[1] + 7 * pesel[2] + 9 * pesel[3] + 1 * pesel[4] + 3 * pesel[5] + 7 * pesel[6] + 9 * pesel[7] + 1 * pesel[8] + 3 * pesel[9]; sum %= 10; sum = 10 - sum; sum %= 10; if(sum != pesel[10]) return false; month = 10 * pesel[2]; month += pesel[3]; if (month > 80 && month < 93) { month -= 80; } else if (month > 20 && month < 33) { month -= 20; } else if (month > 40 && month < 53) { month -= 40; } else if (month > 60 && month < 73) { month -= 60; } if(month < 0 || month >= 13) return false; year = 10 * pesel[0]; year += pesel[1]; let monthAux = 10 * pesel[2]; monthAux += pesel[3]; if (monthAux > 80 && monthAux < 93) { year += 1800; } else if (monthAux > 0 && monthAux < 13) { year += 1900; } else if (monthAux > 20 && monthAux < 33) { year += 2000; } else if (monthAux > 40 && monthAux < 53) { year += 2100; } else if (monthAux > 60 && monthAux < 73) { year += 2200; } day = 10 * pesel[4]; day += pesel[5]; return (day >0 && day < 32 && (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)) || (day >0 && day < 31 && (month == 4 || month == 6 || month == 9 || month == 11)) || (day >0 && day < 30 && (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) || day >0 && day < 29 && !(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)); }