br.js 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. /*
  2. Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.validate.br"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  7. dojo._hasResource["dojox.validate.br"] = true;
  8. dojo.provide("dojox.validate.br");
  9. dojo.require("dojox.validate._base");
  10. dojox.validate.br.isValidCnpj = function(/*String*/value){
  11. // summary:
  12. // Validates a CNPJ/CGC number
  13. //
  14. // value: String
  15. // The CNPJ/CGC number in ##.###.###/####-##, ########/####-##,
  16. // ############-## or ############## format
  17. if(!dojo.isString(value)){
  18. if(!value){
  19. return false;
  20. }
  21. value = value + "";
  22. while(value.length < 14){
  23. value = "0" + value;
  24. }
  25. }
  26. var flags = {
  27. format: [
  28. "##.###.###/####-##",
  29. "########/####-##",
  30. "############-##",
  31. "##############"
  32. ]
  33. };
  34. if(dojox.validate.isNumberFormat(value, flags)){
  35. // Matched the initial test, so break this down into the
  36. // parts to be validated.
  37. value = value.replace("/", "").replace(/\./g, "").replace("-", "");
  38. var cgc = [];
  39. var dv = [];
  40. var i, j, tmp;
  41. // Check for obvious bad combos
  42. // all 0s to all 9's.
  43. for(i = 0; i < 10; i++){
  44. tmp = "";
  45. for(j = 0; j < value.length; j++){
  46. tmp += "" + i;
  47. }
  48. if(value === tmp){
  49. return false;
  50. }
  51. }
  52. //Split out the DV from the main number.
  53. for(i = 0; i < 12; i++){
  54. cgc.push(parseInt(value.charAt(i), 10));
  55. }
  56. for(i = 12; i < 14; i++){
  57. dv.push(parseInt(value.charAt(i), 10));
  58. }
  59. var base = [9,8,7,6,5,4,3,2,9,8,7,6].reverse();
  60. var sum = 0;
  61. for(i = 0; i < cgc.length; i++){
  62. sum += cgc[i] * base[i];
  63. }
  64. var dv0 = sum % 11;
  65. if(dv0 == dv[0]){
  66. // Still seems valid, keep going.
  67. sum = 0;
  68. base = [9,8,7,6,5,4,3,2,9,8,7,6,5].reverse();
  69. cgc.push(dv0);
  70. for(i = 0; i < cgc.length; i++){
  71. sum += cgc[i] * base[i];
  72. }
  73. var dv1 = sum % 11;
  74. if(dv1 === dv[1]){
  75. // Whew, looks valid.
  76. return true;
  77. }
  78. }
  79. }
  80. return false;
  81. };
  82. dojox.validate.br.computeCnpjDv = function(/*String*/value){
  83. // summary: Generate the DV code (checksum part) for a Cnpj number
  84. //
  85. // value: The CGC number in ##.###.###/#### or ############ format
  86. if(!dojo.isString(value)){
  87. if(!value){
  88. return "";
  89. }
  90. value = value + "";
  91. while(value.length < 12){
  92. value = "0" + value;
  93. }
  94. }
  95. var flags = {
  96. format: [
  97. "##.###.###/####",
  98. "########/####",
  99. "############"
  100. ]
  101. };
  102. if(dojox.validate.isNumberFormat(value, flags)){
  103. // Matched the initial test, so break this down into the
  104. // parts to compute the DV.
  105. value = value.replace("/", "").replace(/\./g, "");
  106. var cgc = [];
  107. var i, j, tmp;
  108. // Check for obvious bad combos
  109. // all 0s to all 9's.
  110. for(i = 0; i < 10; i++){
  111. tmp = "";
  112. for(j = 0; j < value.length; j++){
  113. tmp += "" + i;
  114. }
  115. if(value === tmp){
  116. return "";
  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. dojox.validate.br.isValidCpf = function(/*String*/value){
  140. // summary:
  141. // Validates a CPF number
  142. //
  143. // value: String
  144. // The CPF number in #########-## or ###########,
  145. // format
  146. if(!dojo.isString(value)){
  147. if(!value){
  148. return false;
  149. }
  150. value = value + "";
  151. while(value.length < 11){
  152. value = "0" + value;
  153. }
  154. }
  155. var flags = {
  156. format: [
  157. "###.###.###-##",
  158. "#########-##",
  159. "###########"
  160. ]
  161. };
  162. if(dojox.validate.isNumberFormat(value, flags)){
  163. // Matched the initial test, so break this down into the
  164. // parts to be validated.
  165. value = value.replace("-", "").replace(/\./g, "");
  166. var cpf = [];
  167. var dv = [];
  168. var i, j, tmp;
  169. // Check for obvious bad combos
  170. // all 0s to all 9's.
  171. for(i = 0; i < 10; i++){
  172. tmp = "";
  173. for(j = 0; j < value.length; j++){
  174. tmp += "" + i;
  175. }
  176. if(value === tmp){
  177. return false;
  178. }
  179. }
  180. //Split out the DV from the main number.
  181. for(i = 0; i < 9; i++){
  182. cpf.push(parseInt(value.charAt(i), 10));
  183. }
  184. for(i = 9; i < 12; i++){
  185. dv.push(parseInt(value.charAt(i), 10));
  186. }
  187. var base = [9,8,7,6,5,4,3,2,1].reverse();
  188. var sum = 0;
  189. for(i = 0; i < cpf.length; i++){
  190. sum += cpf[i] * base[i];
  191. }
  192. var dv0 = sum % 11;
  193. if(dv0 == dv[0]){
  194. // Still seems valid, keep going.
  195. sum = 0;
  196. base = [9,8,7,6,5,4,3,2,1,0].reverse();
  197. cpf.push(dv0);
  198. for(i = 0; i < cpf.length; i++){
  199. sum += cpf[i] * base[i];
  200. }
  201. var dv1 = sum % 11;
  202. if(dv1 === dv[1]){
  203. // Whew, looks valid.
  204. return true;
  205. }
  206. }
  207. }
  208. return false;
  209. };
  210. dojox.validate.br.computeCpfDv = function(/*String*/value){
  211. // summary:
  212. // Generate the DV code (checksum part) for a CPF number
  213. //
  214. // value: String
  215. // The CPF number in ######### format
  216. if(!dojo.isString(value)){
  217. if(!value){
  218. return "";
  219. }
  220. value = value + "";
  221. while(value.length < 9){
  222. value = "0" + value;
  223. }
  224. }
  225. var flags = {
  226. format: [
  227. "###.###.###",
  228. "#########"
  229. ]
  230. };
  231. if(dojox.validate.isNumberFormat(value, flags)){
  232. // Matched the initial test, so break this down into the
  233. // parts to compute the DV.
  234. value = value.replace(/\./g, "");
  235. var cpf = [];
  236. // Check for obvious bad combos
  237. // all 0s to all 9's.
  238. for(i = 0; i < 10; i++){
  239. tmp = "";
  240. for(j = 0; j < value.length; j++){
  241. tmp += "" + i;
  242. }
  243. if(value === tmp){
  244. return "";
  245. }
  246. }
  247. for(i = 0; i < value.length; i++){
  248. cpf.push(parseInt(value.charAt(i), 10));
  249. }
  250. var base = [9,8,7,6,5,4,3,2,1].reverse();
  251. var sum = 0;
  252. for(i = 0; i < cpf.length; i++){
  253. sum += cpf[i] * base[i];
  254. }
  255. var dv0 = sum % 11;
  256. sum = 0;
  257. base = [9,8,7,6,5,4,3,2,1,0].reverse();
  258. cpf.push(dv0);
  259. for(i = 0; i < cpf.length; i++){
  260. sum += cpf[i] * base[i];
  261. }
  262. var dv1 = sum % 11;
  263. return ("" + dv0) + dv1;
  264. }
  265. return "";
  266. };
  267. }