summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/validate/br.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/validate/br.js')
-rw-r--r--js/dojo/dojox/validate/br.js278
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;
+});