279 lines
5.7 KiB
JavaScript
279 lines
5.7 KiB
JavaScript
|
//>>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;
|
||
|
});
|