define([ 'Magento_Ui/js/lib/validation/validator', 'jquery', 'jquery/ui', 'jquery/validate', 'mage/translate' ], function (validator,$) { 'use strict'; return function () { var a = { quitarFormato: function (rut) { var strRut = new String(rut); while (strRut.indexOf(".") != -1) { strRut = strRut.replace(".", ""); } while (strRut.indexOf("-") != -1) { strRut = strRut.replace("-", ""); } return strRut; }, digitoValido: function (dv) { if (dv != '0' && dv != '1' && dv != '2' && dv != '3' && dv != '4' && dv != '5' && dv != '6' && dv != '7' && dv != '8' && dv != '9' && dv != 'k' && dv != 'K') { return false; } return true; }, digitoCorrecto: function (crut) { var largo = crut.length, rut = ""; if (largo < 2) { return false; } if (largo > 2) { rut = crut.substring(0, largo - 1); } else { rut = crut.charAt(0); } var dv = crut.charAt(largo - 1); this.digitoValido(dv); if (rut == null || dv == null) { return 0; } var dvr = this.getDigito(rut); if (dvr != dv.toLowerCase()) { return false; } return true; }, getDigito: function (rut) { var dvr = '0'; var suma = 0; var mul = 2; for (var i = rut.length - 1; i >= 0; i--) { suma = suma + rut.charAt(i) * mul; if (mul == 7) { mul = 2; } else { mul++; } } var res = suma % 11; if (res == 1) { return 'k'; } else if (res == 0) { return '0'; } else { return 11 - res; } }, validar: function (texto) { texto = this.quitarFormato(texto); var largo = texto.length; // rut muy corto if (largo < 2) { return false; } // verifica que los numeros correspondan a los de rut for (var i = 0; i < largo; i++) { // numero o letra que no corresponda a los del rut if (!this.digitoValido(texto.charAt(i))) { return false; } } var invertido = ""; for (var i = (largo - 1), j = 0; i >= 0; i--, j++) { invertido = invertido + texto.charAt(i); } var dtexto = ""; dtexto = dtexto + invertido.charAt(0); dtexto = dtexto + '-'; var cnt = 0; for (var i = 1, j = 2; i < largo; i++, j++) { if (cnt == 3) { dtexto = dtexto + '.'; j++; dtexto = dtexto + invertido.charAt(i); cnt = 1; } else { dtexto = dtexto + invertido.charAt(i); cnt++; } } invertido = ""; for (var i = (dtexto.length - 1), j = 0; i >= 0; i--, j++) { invertido = invertido + dtexto.charAt(i); } if (this.digitoCorrecto(texto)) { return true; } return false; } } var rule = "validate-rut"; validator.addRule( rule, function (value, element) { return a.validar(value); }, $.mage.__("Invalid RUT, please verify and try again") ); $.validator.addMethod( rule, function (value, element) { return a.validar(value); }, $.mage.__("Invalid RUT, please verify and try again") ); } });