Blame view

frontend/web/js/validation/src/additional/cpfBR.js 1.59 KB
18b850c7   Administrator   Importers CRUD
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  /*
   * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.
   * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.
   */
  $.validator.addMethod("cpfBR", function(value) {
  	// Removing special characters from value
  	value = value.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "");
  
  	// Checking value to have 11 digits only
  	if (value.length !== 11) {
  		return false;
  	}
  
  	var sum = 0,
  		firstCN, secondCN, checkResult, i;
  
  	firstCN = parseInt(value.substring(9, 10), 10);
  	secondCN = parseInt(value.substring(10, 11), 10);
  
  	checkResult = function(sum, cn) {
  		var result = (sum * 10) % 11;
  		if ((result === 10) || (result === 11)) {result = 0;}
  		return (result === cn);
  	};
  
  	// Checking for dump data
  	if (value === "" ||
  		value === "00000000000" ||
  		value === "11111111111" ||
  		value === "22222222222" ||
  		value === "33333333333" ||
  		value === "44444444444" ||
  		value === "55555555555" ||
  		value === "66666666666" ||
  		value === "77777777777" ||
  		value === "88888888888" ||
  		value === "99999999999"
  	) {
  		return false;
  	}
  
  	// Step 1 - using first Check Number:
  	for ( i = 1; i <= 9; i++ ) {
  		sum = sum + parseInt(value.substring(i - 1, i), 10) * (11 - i);
  	}
  
  	// If first Check Number (CN) is valid, move to Step 2 - using second Check Number:
  	if ( checkResult(sum, firstCN) ) {
  		sum = 0;
  		for ( i = 1; i <= 10; i++ ) {
  			sum = sum + parseInt(value.substring(i - 1, i), 10) * (12 - i);
  		}
  		return checkResult(sum, secondCN);
  	}
  	return false;
  
  }, "Please specify a valid CPF number");