Leetcode 隨時更新

判斷身分證字號是否有效

編號規則

  1. 首碼 -> 戶籍地
  2. 有效碼公式
    假設身分證字號為A123456789
    • A 轉換為數值是 10,
    • 每一碼拆開後分別編號
    • 每一個數字依序乘上 1、9、8、7、6、5、4、3、2、1、1
    • 最後再相加
    • 然後再除以 10
    • 整除就是有效之身分證號碼
順序 n1 n2 n3 n4 n5 n6 n7 n8 n9 n10 n11
號碼 1 0 1 2 3 4 5 6 7 8 9
1 9 8 7 6 5 4 3 2 1 1
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
function isValidTWId(str) {
if (str.length !== 10) return false
// 首碼->戶籍碼
const n = alphaToNumber(str[0])
// 十位數拆開
const firstNumber = Math.floor(n / 10)
const secondNumber = n % 10

// 每一個數字依序乘上1、9、8、7、6、5、4、3、2、1、1,最後再相加
let sum = firstNumber * 1 + secondNumber * 9
for (let i = 1; i < str.length - 1; i++) {
sum += str[i] * (9 - i)
}
sum += Number(str[9])
return sum % 10 === 0
}
function alphaToNumber(alpha) {
const mapping = {
A: 10,
B: 11,
C: 12,
D: 13,
E: 14,
F: 15,
G: 16,
H: 17,
I: 34,
J: 18,
K: 19,
L: 20,
M: 21,
N: 22,
O: 35,
P: 23,
Q: 24,
R: 25,
S: 26,
T: 27,
U: 28,
V: 29,
W: 32,
X: 30,
Y: 31,
Z: 33,
}
return mapping[alpha]
}
console.log(isValidTWId('A123456789'))
console.log(isValidTWId('A234567890'))