Blame view

bower_components/jquery-validation/src/additional/iban.js 3.59 KB
4c373a79   Administrator   ашкые
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  /**
   * IBAN is the international bank account number.
   * It has a country - specific format, that is checked here too
   *
   * Validation is case-insensitive. Please make sure to normalize input yourself.
   */
  $.validator.addMethod( "iban", function( value, element ) {
  
  	// Some quick simple tests to prevent needless work
  	if ( this.optional( element ) ) {
  		return true;
  	}
  
  	// Remove spaces and to upper case
  	var iban = value.replace( / /g, "" ).toUpperCase(),
  		ibancheckdigits = "",
  		leadingZeroes = true,
  		cRest = "",
  		cOperator = "",
  		countrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;
  
  	// Check the country code and find the country specific format
  	countrycode = iban.substring( 0, 2 );
  	bbancountrypatterns = {
  		"AL": "\\d{8}[\\dA-Z]{16}",
  		"AD": "\\d{8}[\\dA-Z]{12}",
  		"AT": "\\d{16}",
  		"AZ": "[\\dA-Z]{4}\\d{20}",
  		"BE": "\\d{12}",
  		"BH": "[A-Z]{4}[\\dA-Z]{14}",
  		"BA": "\\d{16}",
  		"BR": "\\d{23}[A-Z][\\dA-Z]",
  		"BG": "[A-Z]{4}\\d{6}[\\dA-Z]{8}",
  		"CR": "\\d{17}",
  		"HR": "\\d{17}",
  		"CY": "\\d{8}[\\dA-Z]{16}",
  		"CZ": "\\d{20}",
  		"DK": "\\d{14}",
  		"DO": "[A-Z]{4}\\d{20}",
  		"EE": "\\d{16}",
  		"FO": "\\d{14}",
  		"FI": "\\d{14}",
  		"FR": "\\d{10}[\\dA-Z]{11}\\d{2}",
  		"GE": "[\\dA-Z]{2}\\d{16}",
  		"DE": "\\d{18}",
  		"GI": "[A-Z]{4}[\\dA-Z]{15}",
  		"GR": "\\d{7}[\\dA-Z]{16}",
  		"GL": "\\d{14}",
  		"GT": "[\\dA-Z]{4}[\\dA-Z]{20}",
  		"HU": "\\d{24}",
  		"IS": "\\d{22}",
  		"IE": "[\\dA-Z]{4}\\d{14}",
  		"IL": "\\d{19}",
  		"IT": "[A-Z]\\d{10}[\\dA-Z]{12}",
  		"KZ": "\\d{3}[\\dA-Z]{13}",
  		"KW": "[A-Z]{4}[\\dA-Z]{22}",
  		"LV": "[A-Z]{4}[\\dA-Z]{13}",
  		"LB": "\\d{4}[\\dA-Z]{20}",
  		"LI": "\\d{5}[\\dA-Z]{12}",
  		"LT": "\\d{16}",
  		"LU": "\\d{3}[\\dA-Z]{13}",
  		"MK": "\\d{3}[\\dA-Z]{10}\\d{2}",
  		"MT": "[A-Z]{4}\\d{5}[\\dA-Z]{18}",
  		"MR": "\\d{23}",
  		"MU": "[A-Z]{4}\\d{19}[A-Z]{3}",
  		"MC": "\\d{10}[\\dA-Z]{11}\\d{2}",
  		"MD": "[\\dA-Z]{2}\\d{18}",
  		"ME": "\\d{18}",
  		"NL": "[A-Z]{4}\\d{10}",
  		"NO": "\\d{11}",
  		"PK": "[\\dA-Z]{4}\\d{16}",
  		"PS": "[\\dA-Z]{4}\\d{21}",
  		"PL": "\\d{24}",
  		"PT": "\\d{21}",
  		"RO": "[A-Z]{4}[\\dA-Z]{16}",
  		"SM": "[A-Z]\\d{10}[\\dA-Z]{12}",
  		"SA": "\\d{2}[\\dA-Z]{18}",
  		"RS": "\\d{18}",
  		"SK": "\\d{20}",
  		"SI": "\\d{15}",
  		"ES": "\\d{20}",
  		"SE": "\\d{20}",
  		"CH": "\\d{5}[\\dA-Z]{12}",
  		"TN": "\\d{20}",
  		"TR": "\\d{5}[\\dA-Z]{17}",
  		"AE": "\\d{3}\\d{16}",
  		"GB": "[A-Z]{4}\\d{14}",
  		"VG": "[\\dA-Z]{4}\\d{16}"
  	};
  
  	bbanpattern = bbancountrypatterns[ countrycode ];
  
  	// As new countries will start using IBAN in the
  	// future, we only check if the countrycode is known.
  	// This prevents false negatives, while almost all
  	// false positives introduced by this, will be caught
  	// by the checksum validation below anyway.
  	// Strict checking should return FALSE for unknown
  	// countries.
  	if ( typeof bbanpattern !== "undefined" ) {
  		ibanregexp = new RegExp( "^[A-Z]{2}\\d{2}" + bbanpattern + "$", "" );
  		if ( !( ibanregexp.test( iban ) ) ) {
  			return false; // Invalid country specific format
  		}
  	}
  
  	// Now check the checksum, first convert to digits
  	ibancheck = iban.substring( 4, iban.length ) + iban.substring( 0, 4 );
  	for ( i = 0; i < ibancheck.length; i++ ) {
  		charAt = ibancheck.charAt( i );
  		if ( charAt !== "0" ) {
  			leadingZeroes = false;
  		}
  		if ( !leadingZeroes ) {
  			ibancheckdigits += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf( charAt );
  		}
  	}
  
  	// Calculate the result of: ibancheckdigits % 97
  	for ( p = 0; p < ibancheckdigits.length; p++ ) {
  		cChar = ibancheckdigits.charAt( p );
  		cOperator = "" + cRest + "" + cChar;
  		cRest = cOperator % 97;
  	}
  	return cRest === 1;
  }, "Please specify a valid IBAN" );