123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.validate.br"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.validate.br"] = true;
- dojo.provide("dojox.validate.br");
- dojo.require("dojox.validate._base");
- dojox.validate.br.isValidCnpj = function(/*String*/value){
- // summary:
- // Validates a CNPJ/CGC number
- //
- // value: String
- // The CNPJ/CGC number in ##.###.###/####-##, ########/####-##,
- // ############-## or ############## format
- 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;
- };
- dojox.validate.br.computeCnpjDv = function(/*String*/value){
- // summary: Generate the DV code (checksum part) for a Cnpj number
- //
- // value: The CGC number in ##.###.###/#### or ############ format
- if(!dojo.isString(value)){
- if(!value){
- return "";
- }
- value = value + "";
- while(value.length < 12){
- value = "0" + value;
- }
- }
- var flags = {
- format: [
- "##.###.###/####",
- "########/####",
- "############"
- ]
- };
- if(dojox.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 "";
- };
- dojox.validate.br.isValidCpf = function(/*String*/value){
- // summary:
- // Validates a CPF number
- //
- // value: String
- // The CPF number in #########-## or ###########,
- // format
- if(!dojo.isString(value)){
- if(!value){
- return false;
- }
- value = value + "";
- while(value.length < 11){
- 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, "");
- 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;
- };
- dojox.validate.br.computeCpfDv = function(/*String*/value){
- // summary:
- // Generate the DV code (checksum part) for a CPF number
- //
- // value: String
- // The CPF number in ######### format
- if(!dojo.isString(value)){
- if(!value){
- return "";
- }
- value = value + "";
- while(value.length < 9){
- value = "0" + value;
- }
- }
- var flags = {
- format: [
- "###.###.###",
- "#########"
- ]
- };
- if(dojox.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 "";
- };
- }
|