校驗18位身份證號碼(判斷最後一位校驗位和性別)

2021-10-01 06:26:53 字數 1753 閱讀 7811

公民身份號碼是一系列組合碼,由十七位數字本體碼和一位校驗碼組成。

1、將身份證號碼前17位數分別乘以不同的係數。從第一位到第十七位的係數分別為:【7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2】

2、將這17位數字和係數相乘的結果相加

3、用加出來和除以11,看餘數是多少?

4、餘數只可能有【0-1-2-3-4-5-6-7-8-9-10】這11個數字。其分別對應的最後一位身份證的號碼為【1-0-x-9-8-7-6-5-4-3-2】

5、通過上面得知如果餘數是2,就會在身份證的第18位數字上出現羅馬數字的ⅹ。如果餘數是10,身份證的最後一位號碼就是2

舉例:某女生的身份證號碼為【36073119960518294x】

①【(3*7)+(6*9)+(0*10)+(7*5)+(3*8)+(1*4)+(1*2)+(9*1)+(9*6)+(6*3)+(0*7)+(5*9)+(1*10)+(8*5)+(2*8)+(9*4)+(4*2)】= 376

② 376除以11等於34餘2

③ 餘數2對應【1-0-x-9-8-7-6-5-4-3-2】的校驗碼剛好是x

④ 該身份證號碼正確

判斷身份證號碼第17位,奇數代表男性, 偶數代表女性

【36073119960518294x】:4為偶數,女性

【53010219200508011x】:1為奇數, 男性

function istrueidcard(idcard) ((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d$)|(^[1-9]\d[1-9]\d((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d)|\dx)$)$/;

let wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];// 加權因子

let validecode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];// 身份證驗證位值,10代表x

let sum = 0; // 宣告加權求和變數

let remainder // 餘數

let lastcode = idcard[17] // 最後一位

// 將最後位為x的驗證碼替換為10方便後續操作

if (lastcode == 'x' || lastcode == 'x')

// 校驗身份證號碼

if (!mainland.test(idcard))

// 校驗身份證最後一位

for (let i = 0; i < 17; i++)

// 得到餘數

remainder = sum % 11;

// 判斷校驗位和對應驗證位是否相等

if (lastcode == validecode[remainder]) else

// 判斷性別

let ***code = idcard[16]

if (***code % 2 == 0) else

}istrueidcard('36073119960518294x')

身份證號碼校驗

中國居民身份證號碼編碼規則 中國居民身份證校驗碼演算法 都包含 author liuwei date 2020 11 19 身份證校驗工具 public class idnumutil 定義判別使用者身份證號的正規表示式 15位或者18位,最後一位可以為字母 string regularexpres...

Oracle 身份證號碼校驗

今天來了身份證校驗的需求,想在oracle中校驗後將錯誤資料查詢出來。於是我在網上查到了身份證校驗的oracle函式。但是發現一些正確的身份證號也未校驗通過!後來經過千辛萬苦的努力終於發現了,網上給的函式中判斷是否是閏年的 substrb 函式應該從第7為開始擷取,而不是第6位!還有要注意最後一位校...

JS校驗身份證號碼

function isidcardno num d 0 9 x test num 驗證前2位,城市符合 var acity if acity parseint num.substr 0,2 null alert 城市 acity parseint num.substr 0,2 下面分別分析出生日期和...