source: [view]
if(!dojo.isString(value)){
if(!value){
return false;
}
value = value + "";
while(value.length < 14){
value = "0" + value;
}
}
var flags = {
format: [
"##.###.###/####-##",
"########/####-##",
"############-##",
"##############"
]
};
if(dojox.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;