diff options
Diffstat (limited to 'js/dojo/dojox/validate/br.js')
| -rw-r--r-- | js/dojo/dojox/validate/br.js | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/js/dojo/dojox/validate/br.js b/js/dojo/dojox/validate/br.js new file mode 100644 index 0000000..2c12885 --- /dev/null +++ b/js/dojo/dojox/validate/br.js @@ -0,0 +1,278 @@ +//>>built +define("dojox/validate/br", ["dojo/_base/lang", "./_base"], function(lang, validate){ + +var br = lang.getObject("br", true, validate); +br.isValidCnpj = function(/*String*/value){ + // summary: + // Validates a CNPJ/CGC number + // + // value: String + // The CNPJ/CGC number in ##.###.###/####-##, ########/####-##, + // ############-## or ############## format + if(!lang.isString(value)){ + if(!value){ + return false; + } + value = value + ""; + while(value.length < 14){ + value = "0" + value; + } + } + var flags = { + format: [ + "##.###.###/####-##", + "########/####-##", + "############-##", + "##############" + ] + }; + if(validate.isNumberFormat(value, flags)){ + // Matched the initial test, so break this down into the + // parts to be validated. + value = value.replace("/", "").replace(/\./g, "").replace("-", ""); + var cgc = []; + var dv = []; + var i, j, tmp; + + // Check for obvious bad combos + // all 0s to all 9's. + for(i = 0; i < 10; i++){ + tmp = ""; + for(j = 0; j < value.length; j++){ + tmp += "" + i; + } + if(value === tmp){ + return false; + } + } + + //Split out the DV from the main number. + for(i = 0; i < 12; i++){ + cgc.push(parseInt(value.charAt(i), 10)); + } + for(i = 12; i < 14; i++){ + dv.push(parseInt(value.charAt(i), 10)); + } + + var base = [9,8,7,6,5,4,3,2,9,8,7,6].reverse(); + var sum = 0; + for(i = 0; i < cgc.length; i++){ + sum += cgc[i] * base[i]; + } + var dv0 = sum % 11; + if(dv0 == dv[0]){ + // Still seems valid, keep going. + sum = 0; + base = [9,8,7,6,5,4,3,2,9,8,7,6,5].reverse(); + cgc.push(dv0); + for(i = 0; i < cgc.length; i++){ + sum += cgc[i] * base[i]; + } + var dv1 = sum % 11; + if(dv1 === dv[1]){ + // Whew, looks valid. + return true; + } + } + } + return false; +}; + +br.computeCnpjDv = function(/*String*/value){ + // summary: Generate the DV code (checksum part) for a Cnpj number + // + // value: The CGC number in ##.###.###/#### or ############ format + if(!lang.isString(value)){ + if(!value){ + return ""; + } + value = value + ""; + while(value.length < 12){ + value = "0" + value; + } + } + var flags = { + format: [ + "##.###.###/####", + "########/####", + "############" + ] + }; + if(validate.isNumberFormat(value, flags)){ + // Matched the initial test, so break this down into the + // parts to compute the DV. + value = value.replace("/", "").replace(/\./g, ""); + var cgc = []; + var i, j, tmp; + + // Check for obvious bad combos + // all 0s to all 9's. + for(i = 0; i < 10; i++){ + tmp = ""; + for(j = 0; j < value.length; j++){ + tmp += "" + i; + } + if(value === tmp){ + return ""; + } + } + + for(i = 0; i < value.length; i++){ + cgc.push(parseInt(value.charAt(i), 10)); + } + var base = [9,8,7,6,5,4,3,2,9,8,7,6].reverse(); + var sum = 0; + for(i = 0; i < cgc.length; i++){ + sum += cgc[i] * base[i]; + } + var dv0 = sum % 11; + sum = 0; + base = [9,8,7,6,5,4,3,2,9,8,7,6,5].reverse(); + cgc.push(dv0); + for(i = 0; i < cgc.length; i++){ + sum += cgc[i] * base[i]; + } + var dv1 = sum % 11; + return ("" + dv0) + dv1; + } + return ""; +}; + + +br.isValidCpf = function(/*String*/value){ + // summary: + // Validates a CPF number + // + // value: String + // The CPF number in #########-## or ###########, + // format + if(!lang.isString(value)){ + if(!value){ + return false; + } + value = value + ""; + while(value.length < 11){ + value = "0" + value; + } + } + var flags = { + format: [ + "###.###.###-##", + "#########-##", + "###########" + ] + }; + if(validate.isNumberFormat(value, flags)){ + // Matched the initial test, so break this down into the + // parts to be validated. + value = value.replace("-", "").replace(/\./g, ""); + var cpf = []; + var dv = []; + var i, j, tmp; + + // Check for obvious bad combos + // all 0s to all 9's. + for(i = 0; i < 10; i++){ + tmp = ""; + for(j = 0; j < value.length; j++){ + tmp += "" + i; + } + if(value === tmp){ + return false; + } + } + + //Split out the DV from the main number. + for(i = 0; i < 9; i++){ + cpf.push(parseInt(value.charAt(i), 10)); + } + for(i = 9; i < 12; i++){ + dv.push(parseInt(value.charAt(i), 10)); + } + + var base = [9,8,7,6,5,4,3,2,1].reverse(); + var sum = 0; + for(i = 0; i < cpf.length; i++){ + sum += cpf[i] * base[i]; + } + var dv0 = sum % 11; + if(dv0 == dv[0]){ + // Still seems valid, keep going. + sum = 0; + base = [9,8,7,6,5,4,3,2,1,0].reverse(); + cpf.push(dv0); + for(i = 0; i < cpf.length; i++){ + sum += cpf[i] * base[i]; + } + var dv1 = sum % 11; + if(dv1 === dv[1]){ + // Whew, looks valid. + return true; + } + } + } + return false; +}; + +br.computeCpfDv = function(/*String*/value){ + // summary: + // Generate the DV code (checksum part) for a CPF number + // + // value: String + // The CPF number in ######### format + if(!lang.isString(value)){ + if(!value){ + return ""; + } + value = value + ""; + while(value.length < 9){ + value = "0" + value; + } + } + var flags = { + format: [ + "###.###.###", + "#########" + ] + }; + if(validate.isNumberFormat(value, flags)){ + // Matched the initial test, so break this down into the + // parts to compute the DV. + value = value.replace(/\./g, ""); + var cpf = []; + + // Check for obvious bad combos + // all 0s to all 9's. + for(i = 0; i < 10; i++){ + tmp = ""; + for(j = 0; j < value.length; j++){ + tmp += "" + i; + } + if(value === tmp){ + return ""; + } + } + + for(i = 0; i < value.length; i++){ + cpf.push(parseInt(value.charAt(i), 10)); + } + var base = [9,8,7,6,5,4,3,2,1].reverse(); + var sum = 0; + for(i = 0; i < cpf.length; i++){ + sum += cpf[i] * base[i]; + } + var dv0 = sum % 11; + sum = 0; + base = [9,8,7,6,5,4,3,2,1,0].reverse(); + cpf.push(dv0); + for(i = 0; i < cpf.length; i++){ + sum += cpf[i] * base[i]; + } + var dv1 = sum % 11; + return ("" + dv0) + dv1; + } + return ""; +}; + +return br; +}); |
