source: Dev/trunk/src/client/dojox/validate/br.js @ 532

Last change on this file since 532 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

  • Property svn:executable set to *
File size: 5.6 KB
Line 
1define(["dojo/_base/lang", "./_base"], function(lang, validate){
2
3var br = lang.getObject("br", true, validate);
4br.isValidCnpj = function(/*String*/value){
5        // summary:
6        //              Validates a CNPJ/CGC number
7        // value: String
8        //              The CNPJ/CGC number in ##.###.###/####-##, ########/####-##,
9        //              ############-## or ############## format
10        if(!lang.isString(value)){
11                if(!value){
12                        return false;
13                }
14                value = value + "";
15                while(value.length < 14){
16                        value = "0" + value;
17                }
18        }
19        var flags = {
20                format: [
21                        "##.###.###/####-##",
22                        "########/####-##",
23                        "############-##",
24                        "##############"
25                ]
26        };
27        if(validate.isNumberFormat(value, flags)){
28                // Matched the initial test, so break this down into the
29                // parts to be validated.
30                value = value.replace("/", "").replace(/\./g, "").replace("-", "");
31                var cgc = [];
32                var dv = [];
33                var i, j, tmp;
34
35                // Check for obvious bad combos
36                // all 0s to all 9's.
37                for(i = 0; i < 10; i++){
38                        tmp = "";
39                        for(j = 0; j < value.length; j++){
40                                tmp += "" + i;
41                        }
42                        if(value === tmp){
43                                return false;
44                        }
45                }
46
47                //Split out the DV from the main number.
48                for(i = 0; i < 12; i++){
49                        cgc.push(parseInt(value.charAt(i), 10));
50                }
51                for(i = 12; i < 14; i++){
52                        dv.push(parseInt(value.charAt(i), 10));
53                }
54               
55                var base = [9,8,7,6,5,4,3,2,9,8,7,6].reverse();
56                var sum = 0;
57                for(i = 0; i < cgc.length; i++){
58                        sum += cgc[i] * base[i];
59                }
60                var dv0 = sum % 11;
61                if(dv0 == dv[0]){
62                        // Still seems valid, keep going.
63                        sum = 0;
64                        base = [9,8,7,6,5,4,3,2,9,8,7,6,5].reverse();
65                        cgc.push(dv0);
66                        for(i = 0; i < cgc.length; i++){
67                                sum += cgc[i] * base[i];
68                        }
69                        var dv1 = sum % 11;
70                        if(dv1 === dv[1]){
71                                // Whew, looks valid.
72                                return true;
73                        }
74                }
75        }
76        return false;
77};
78
79br.computeCnpjDv = function(/*String*/value){
80        // summary:
81        //              Generate the DV code (checksum part) for a Cnpj number
82        // value:
83        //              The CGC number in ##.###.###/#### or ############ format
84        if(!lang.isString(value)){
85                if(!value){
86                        return "";
87                }
88                value = value + "";
89                while(value.length < 12){
90                        value = "0" + value;
91                }
92        }
93        var flags = {
94                format: [
95                        "##.###.###/####",
96                        "########/####",
97                        "############"
98                ]
99        };
100        if(validate.isNumberFormat(value, flags)){
101                // Matched the initial test, so break this down into the
102                // parts to compute the DV.
103                value = value.replace("/", "").replace(/\./g, "");
104                var cgc = [];
105                var i, j, tmp;
106
107                // Check for obvious bad combos
108                // all 0s to all 9's.
109                for(i = 0; i < 10; i++){
110                        tmp = "";
111                        for(j = 0; j < value.length; j++){
112                                tmp += "" + i;
113                        }
114                        if(value === tmp){
115                                return "";
116                        }
117                }
118
119                for(i = 0; i < value.length; i++){
120                        cgc.push(parseInt(value.charAt(i), 10));
121                }
122                var base = [9,8,7,6,5,4,3,2,9,8,7,6].reverse();
123                var sum = 0;
124                for(i = 0; i < cgc.length; i++){
125                        sum += cgc[i] * base[i];
126                }
127                var dv0 = sum % 11;
128                sum = 0;
129                base = [9,8,7,6,5,4,3,2,9,8,7,6,5].reverse();
130                cgc.push(dv0);
131                for(i = 0; i < cgc.length; i++){
132                        sum += cgc[i] * base[i];
133                }
134                var dv1 = sum % 11;
135                return ("" + dv0) + dv1;
136        }
137        return "";
138};
139
140
141br.isValidCpf = function(/*String*/value){
142        // summary:
143        //              Validates a CPF number
144        // value: String
145        //              The CPF number in #########-## or ###########,
146        //              format
147        if(!lang.isString(value)){
148                if(!value){
149                        return false;
150                }
151                value = value + "";
152                while(value.length < 11){
153                        value = "0" + value;
154                }
155        }
156        var flags = {
157                format: [
158                        "###.###.###-##",
159                        "#########-##",
160                        "###########"
161                ]
162        };
163        if(validate.isNumberFormat(value, flags)){
164                // Matched the initial test, so break this down into the
165                // parts to be validated.
166                value = value.replace("-", "").replace(/\./g, "");
167                var cpf = [];
168                var dv = [];
169                var i, j, tmp;
170
171                // Check for obvious bad combos
172                // all 0s to all 9's.
173                for(i = 0; i < 10; i++){
174                        tmp = "";
175                        for(j = 0; j < value.length; j++){
176                                tmp += "" + i;
177                        }
178                        if(value === tmp){
179                                return false;
180                        }
181                }
182
183                //Split out the DV from the main number.
184                for(i = 0; i < 9; i++){
185                        cpf.push(parseInt(value.charAt(i), 10));
186                }
187                for(i = 9; i < 12; i++){
188                        dv.push(parseInt(value.charAt(i), 10));
189                }
190               
191                var base = [9,8,7,6,5,4,3,2,1].reverse();
192                var sum = 0;
193                for(i = 0; i < cpf.length; i++){
194                        sum += cpf[i] * base[i];
195                }
196                var dv0 = sum % 11;
197                if(dv0 == dv[0]){
198                        // Still seems valid, keep going.
199                        sum = 0;
200                        base = [9,8,7,6,5,4,3,2,1,0].reverse();
201                        cpf.push(dv0);
202                        for(i = 0; i < cpf.length; i++){
203                                sum += cpf[i] * base[i];
204                        }
205                        var dv1 = sum % 11;
206                        if(dv1 === dv[1]){
207                                // Whew, looks valid.
208                                return true;
209                        }
210                }
211        }
212        return false;
213};
214
215br.computeCpfDv = function(/*String*/value){
216        // summary:
217        //              Generate the DV code (checksum part) for a CPF number
218        // value: String
219        //              The CPF number in ######### format
220        if(!lang.isString(value)){
221                if(!value){
222                        return "";
223                }
224                value = value + "";
225                while(value.length < 9){
226                        value = "0" + value;
227                }
228        }
229        var flags = {
230                format: [
231                        "###.###.###",
232                        "#########"
233                ]
234        };
235        if(validate.isNumberFormat(value, flags)){
236                // Matched the initial test, so break this down into the
237                // parts to compute the DV.
238                value = value.replace(/\./g, "");
239                var cpf = [];
240               
241                // Check for obvious bad combos
242                // all 0s to all 9's.
243                for(i = 0; i < 10; i++){
244                        tmp = "";
245                        for(j = 0; j < value.length; j++){
246                                tmp += "" + i;
247                        }
248                        if(value === tmp){
249                                return "";
250                        }
251                }
252
253                for(i = 0; i < value.length; i++){
254                        cpf.push(parseInt(value.charAt(i), 10));
255                }
256                var base = [9,8,7,6,5,4,3,2,1].reverse();
257                var sum = 0;
258                for(i = 0; i < cpf.length; i++){
259                        sum += cpf[i] * base[i];
260                }
261                var dv0 = sum % 11;
262                sum = 0;
263                base = [9,8,7,6,5,4,3,2,1,0].reverse();
264                cpf.push(dv0);
265                for(i = 0; i < cpf.length; i++){
266                        sum += cpf[i] * base[i];
267                }
268                var dv1 = sum % 11;
269                return ("" + dv0) + dv1;
270        }
271        return "";
272};
273
274return br;
275});
Note: See TracBrowser for help on using the repository browser.