1 var assert = require('assert');
2 describe('test', function() {
3 it('coc', function() {
4 var testCard01 = checkHKIDcard("AB987654(2)");
5 assert(testCard01, true);
6
7 var testCard02 = checkHKIDcard("G123456(A)");
8 assert.equal(testCard02, true);
9
10 var testCard03 = checkHKIDcard("L555555(0)");
11 assert.equal(testCard03, true);
12
13 var testCard04 = checkHKIDcard("C123456(9)");
14 assert.equal(testCard04, true);
15
16 var testCard05 = checkHKIDcard("AY987654(A)");
17 assert.equal(testCard05, false);
18
19 });
20 })
21
22
23 function checkHKIDcard(str) {
24 var reg = /^[A-Z]{1,2}[0-9]{6}\([0-9A]\)$/
25 if(!str.match(reg)) return false;
26
27 var temp = str.replace(/[\(\)]/g, '');
28
29 var len = temp.length;
30 var sum = (len === 9)
31 ? 9 * (temp[0].charCodeAt() - 64) + 8 * (temp[1].charCodeAt() - 64)
32 : 8 * (temp[0].charCodeAt() - 64);
33
34 var arr = temp.split('').reverse().join('').substr(1, 6);
35 var arrResult = [2, 3, 4, 5, 6, 7];
36
37 for(var i = 0; i< arr.length; i++) {
38 sum += Number(arr[i]) * arrResult[i];
39 }
40
41 var mod = sum % 11;
42 var lastCode = temp[len -1];
43 if(mod === 0 && Number(lastCode) === 0 ) return true;
44
45 var checkCode = 11 - mod;
46 if(checkCode === 10 && lastCode === 'A') return true;
47
48 if(checkCode > 0 && checkCode < 10 && Number(lastCode) === checkCode) return true;
49 return false;
50 }