Subversion Repositories DevTools

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5048 dpurdie 1
/**
2
 * jQuery Form Validator Module: Security
3
 * ------------------------------------------
4
 * Created by Victor Jonsson <http://www.victorjonsson.se>
5
 *
6
 * This form validation module adds validators typically used on swedish
7
 * websites. This module adds the following validators:
8
 *  - validate_swesec (Social security number)
9
 *  - validate_swemobile
10
 *  - validate_validate_municipality
11
 *  - validate_county
12
 *  - validate_swephone
13
 *
14
 * @website http://formvalidator.net/#swedish-validators
15
 * @license Dual licensed under the MIT or GPL Version 2 licenses
16
 * @version 2.2.beta.69
17
 */
18
(function($, window) {
19
 
20
    /*
21
    * Validate swedish social security number yyyymmddXXXX
22
    */
23
    $.formUtils.addValidator({
24
        name : 'swesec',
25
        validatorFunction : function(securityNumber, $input) {
26
 
27
            var year, month, day, ssnParts;
28
 
29
            if( $input.valAttr('use-hyphen') ) {
30
                ssnParts = securityNumber.split('-');
31
                if( ssnParts.length != 2 ) {
32
                    return false;
33
                }
34
                securityNumber = ssnParts.join('');
35
            }
36
 
37
            if (!securityNumber.match(/^(\d{4})(\d{2})(\d{2})(\d{4})$/)) {
38
                return false;
39
            }
40
 
41
            year = RegExp.$1;
42
            month = $.formUtils.parseDateInt(RegExp.$2);
43
            day = $.formUtils.parseDateInt(RegExp.$3);
44
 
45
            window.ssnGender = ( parseInt( (RegExp.$4).substring(2,3) ) % 2 ) === 0 ? 'female':'male';
46
 
47
            var months = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
48
            if (year % 400 === 0 || year % 4 === 0 && year % 100 !== 0) {
49
                months[1] = 29;
50
            }
51
            if (month < 1 || month > 12 || day < 1 || day > months[month - 1]) {
52
                return false;
53
            }
54
 
55
            securityNumber = securityNumber.substring(2, securityNumber.length);
56
            var check = '';
57
            for (var i = 0; i < securityNumber.length; i++) {
58
                check += ((((i + 1) % 2) + 1)* securityNumber.substring(i, i + 1));
59
            }
60
            var checksum = 0;
61
            for (i = 0; i < check.length; i++) {
62
                checksum += parseInt(check.substring(i, i + 1),10);
63
            }
64
 
65
            return checksum % 10 === 0;
66
        },
67
        errorMessage : '',
68
        errorMessageKey: 'badSecurityNumber'
69
    });
70
 
71
    $.formUtils.addValidator({
72
        name : 'swecounty',
73
        validatorFunction : function(str) {
74
            str = str.toLowerCase();
75
            if($.inArray(str, this.counties) == -1) {
76
                if(str.substr(-3).toLocaleLowerCase() != 'län') {
77
                    return $.inArray(str + 's län', this.counties) > -1;
78
                }
79
 
80
                return false;
81
            }
82
            else
83
                return true;
84
        },
85
        errorMessage: '',
86
        errorMessageKey: 'badCustomVal',
87
        counties : ['stockholms län',
88
            'uppsala län',
89
            'södermanlands län',
90
            'östergötlands län',
91
            'jönköpings län',
92
            'kronobergs län',
93
            'kalmar län',
94
            'gotlands län',
95
            'blekinge län',
96
            'skåne län',
97
            'hallands län',
98
            'västra götalands län',
99
            'värmlands län',
100
            'örebro län',
101
            'västmanlands län',
102
            'dalarnas län',
103
            'gävleborgs län',
104
            'västernorrlands län',
105
            'jämtlands län',
106
            'västerbottens län',
107
            'norrbottens län']
108
    });
109
 
110
    $.formUtils.addValidator({
111
        name : 'swemunicipality',
112
        validatorFunction : function(str) {
113
            str = str.toLowerCase();
114
            if($.inArray(str, this.municipalities) == -1) {
115
 
116
                // First check (dont return)
117
                if(str.substr(-8) == 's kommun') {
118
                    if($.inArray( str.substr(0, str.length-8), this.municipalities ) > -1)
119
                        return true;
120
                }
121
 
122
                // Second check
123
                if(str.substr(-7) == ' kommun') {
124
                    return $.inArray( str.substr(0, str.length-7), this.municipalities ) > -1;
125
                }
126
 
127
                return false;
128
            }
129
            else
130
                return true;
131
        },
132
        errorMessage : '',
133
        errorMessageKey: 'badCustomVal',
134
        municipalities : ['ale','alingsås','alvesta','aneby','arboga','arjeplog','arvidsjaur','arvika','askersund','avesta','bengtsfors','berg','bjurholm','bjuv','boden','bollebygd','bollnäs','borgholm','borlänge','borås','botkyrka','boxholm','bromölla','bräcke','burlöv','båstad','dals-ed','danderyd','degerfors','dorotea','eda','ekerö','eksjö','emmaboda','enköpings','eskilstuna','eslövs','essunga','fagersta','falkenberg','falköping','falu','filipstad','finspång','flen','forshaga','färgelanda','gagnef','gislaved','gnesta','gnosjö','gotland','grum','grästorp','gullspång','gällivare','gävle','göteborg','götene','habo','hagfor','hallsberg','hallstahammar','halmstad','hammarö','haninge','haparanda','heby','hedemora','helsingborg','herrljunga','hjo','hofor','huddinge','hudiksvall','hultsfred','hylte','håbo','hällefor','härjedalen','härnösand','härryda','hässleholm','höganäs','högsby','hörby','höör','jokkmokk','järfälla','jönköping','kalix','kalmar','karlsborg','karlshamn','karlskoga','karlskrona','karlstad','katrineholm','kil','kinda','kiruna','klippan','knivsta','kramfors','kristianstad','kristinehamn','krokoms','kumla','kungsbacka','kungsör','kungälv','kävlinge','köping','laholm','landskrona','laxå','lekeberg','leksand','lerum','lessebo','lidingö','lidköping','lilla edets','lindesbergs','linköpings','ljungby','ljusdals','ljusnarsbergs','lomma','ludvika','luleå','lunds','lycksele','lysekil','malmö','malung-sälen','malå','mariestad','marks','markaryd','mellerud','mjölby','mora','motala','mullsjö','munkedal','munkfors','mölndal','mönsterås','mörbylånga','nacka','nora','norberg','nordanstig','nordmaling','norrköping','norrtälje','norsjö','nybro','nykvarn','nyköping','nynäshamn','nässjö','ockelbo','olofström','orsa','orust','osby','oskarshamn','ovanåker','oxelösund','pajala','partille','perstorp','piteå','ragunda','robertsfors','ronneby','rättvik','sala','salem','sandviken','sigtuna','simrishamn','sjöbo','skara','skellefteå','skinnskatteberg','skurup','skövde','smedjebacken','sollefteå','sollentuna','solna','sorsele','sotenäs','staffanstorp','stenungsund','stockholm','storfors','storuman','strängnäs','strömstad','strömsund','sundbyberg','sundsvall','sunne','surahammar','svalöv','svedala','svenljunga','säffle','säter','sävsjö','söderhamns','söderköping','södertälje','sölvesborg','tanum','tibro','tidaholm','tierp','timrå','tingsryd','tjörn','tomelilla','torsby','torså','tranemo','tranå','trelleborg','trollhättan','trosa','tyresö','täby','töreboda','uddevalla','ulricehamns','umeå','upplands väsby','upplands-bro','uppsala','uppvidinge','vadstena','vaggeryd','valdemarsvik','vallentuna','vansbro','vara','varberg','vaxholm','vellinge','vetlanda','vilhelmina','vimmerby','vindeln','vingåker','vårgårda','vänersborg','vännäs','värmdö','värnamo','västervik','västerås','växjö','ydre','ystad','åmål','ånge','åre','årjäng','åsele','åstorp','åtvidaberg','älmhult','älvdalen','älvkarleby','älvsbyn','ängelholm','öckerö','ödeshög','örebro','örkelljunga','örnsköldsvik','östersund','österåker','östhammar','östra göinge','överkalix','övertorneå']
135
    });
136
 
137
 
138
    /*
139
     * Validate phone number, at least 7 digits only one hyphen and plus allowed
140
     */
141
    $.formUtils.addValidator({
142
        name : 'swephone',
143
        validatorFunction : function(tele) {
144
            var numPlus = tele.match(/\+/g);
145
            var numHifen = tele.match(/-/g);
146
 
147
            if ((numPlus !== null && numPlus.length > 1) || (numHifen !== null && numHifen.length > 1)) {
148
                return false;
149
            }
150
            if (numPlus !== null && tele.indexOf('+') !== 0) {
151
                return false;
152
            }
153
 
154
            tele = tele.replace(/([-|\+])/g, '');
155
            return tele.length > 8 && tele.match(/[^0-9]/g) === null;
156
        },
157
        errorMessage : '',
158
        errorMessageKey: 'badTelephone'
159
    });
160
 
161
 
162
    /*
163
     * Validate that string is a swedish telephone number
164
     */
165
    $.formUtils.addValidator({
166
        name : 'swemobile',
167
        validatorFunction : function(number) {
168
            if (!$.formUtils.validators.validate_swephone.validatorFunction(number)) {
169
                return false;
170
            }
171
 
172
            number = number.replace(/[^0-9]/g, '');
173
            var begin = number.substring(0, 3);
174
 
175
            if (number.length != 10 && begin !== '467') {
176
                return false;
177
            } else if (number.length != 11 && begin === '467') {
178
                return false;
179
            }
180
            return (/07[0-9{1}]/).test(begin) || begin === '467';
181
        },
182
        errorMessage : '',
183
        errorMessageKey: 'badTelephone'
184
    });
185
 
186
    /**
187
     * @private
188
     * @param {Array} listItems
189
     * @return {Array}
190
     */
191
    var _makeSortedList = function(listItems) {
192
        var newList = [];
193
        $.each(listItems, function(i, v) {
194
            newList.push(v.substr(0,1).toUpperCase() + v.substr(1, v.length));
195
        });
196
        newList.sort();
197
        return newList;
198
    };
199
 
200
    $.fn.suggestSwedishCounty = function(settings) {
201
        var counties = _makeSortedList($.formUtils.validators.validate_swecounty.counties);
202
        return $.formUtils.suggest(this, counties, settings);
203
    };
204
 
205
    $.fn.suggestSwedishMunicipality = function(settings) {
206
        var municipalities = _makeSortedList($.formUtils.validators.validate_swemunicipality.municipalities);
207
        return $.formUtils.suggest(this, municipalities, settings);
208
    };
209
 
210
})(jQuery, window);