source: Dev/branches/rest-dojo-ui/client/dojox/validate/br.js @ 274

Last change on this file since 274 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

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