国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js驗證身份證號碼記錄的方法

2024-05-06 15:40:07
字體:
來源:轉載
供稿:網友

在一些需要填寫身份證的表單網頁中,需要對身份證的輸入做一個驗證,于是,我記錄下了自己寫的驗證。在寫驗證之前,我們需要理解身份證的一些常識規則。中華人民共和國居民身份證驗證規則如下:

1.號碼的結構:

公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。 排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼, 三位數字順序碼和一位數字校驗碼。

2.地址碼

*  表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。

3.出生日期碼

*  表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。

4.順序碼

*  表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。

5.校驗碼

*  根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。

而計算方法則為:

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、通過上面得知如果余數是3,就會在身份證的第18位數字上出現的是9。如果對應的數字是2,身份證的最后一位號碼就是羅馬數字x。

例如:某男性的身份證號碼為53010219200508011x, 我們看看這個身份證是不是合法的身份證。

首先我們得出前17位的乘積和[(57)+(39)+(010)+(15)+(08)+(24)+(12)+(91)+(26)+(03)+(07)+(59)+(010)+(85)+(08)+(14)+(1*2)]是189,

然后用189除以11得出的結果是189/11=17----2,也就是說其余數是2。

最后通過對應規則就可以知道余數2對應的檢驗碼是X。所以,可以判定這是一個正確的身份證號碼。

根據以上的規則和計算方法,我們就可以封裝一個驗證身份證的函數,如下:

const validateIdCard = function (idcard) {    // 判斷如果傳入的不是一個字符串,則轉換成字符串    idcard = typeof idcard === 'string' ? idcard : String(idcard);    //正則表達式驗證號碼的結構    let regx = /^[/d]{17}[0-9|X|x]{1}$/;    if (regx.test(idcard)) {      // 驗證前面17位數字,首先定義前面17位系數      let sevenTeenIndex = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];      // 截取參數前17位      let front_seventeen = idcard.slice(0, 17);      // 截取第18位      let eighteen = idcard.slice(17, 18);      // 這里如果是X要轉換成小寫,如果是數字在這里是字符串類型,則轉換成數字類型,好做判斷      eighteen = isNaN(parseInt(eighteen)) ? eighteen.toLowerCase() : parseInt(eighteen);      // 定義一個變量計算系數乘積之和余數      let remainder = 0;      //利用循環計算前17位數與系數乘積并添加到一個數組中      // charAt()類似數組的訪問下標一樣,訪問單個字符串的元素,返回的是一個字符串因此要轉換成數字      for (let i = 0; i < 17; i++) {        remainder = (remainder += parseInt(front_seventeen.charAt(i)) * sevenTeenIndex[i]) % 11;      }      //余數對應數字數組      let remainderKeyArr = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];      // 取得余數對應的值      let remainderKey = remainderKeyArr[remainder] === 'X' ? remainderKeyArr[remainder].toLowerCase() : remainderKeyArr[remainder];      console.log(remainderKey);      console.log(eighteen)      // 如果最后一位數字對應上了余數所對應的值,則驗證合格,否則不合格,      // 由于不確定最后一個數字是否是大小寫的X,所以還是都轉換成小寫進行判斷      if (eighteen === remainderKey) {        return idcard;      } else {        console.log('你輸入的身份證號碼格式不對!')      }    } else {      console.log('你輸入的身份證號碼格式不對,請重新輸入!')    }  }  //函數調用  validateIdCard('53010219200508011x');//驗證合格            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 花莲县| 静宁县| 清流县| 天祝| 玉树县| 曲松县| 香格里拉县| 贵州省| 耒阳市| 金华市| 综艺| 耿马| 新田县| 塔河县| 中江县| 翁源县| 乳山市| 莫力| 屯门区| 汉源县| 综艺| 安阳市| 航空| 怀远县| 柳江县| 永济市| 石首市| 汝阳县| 固始县| 广饶县| 随州市| 眉山市| 太和县| 兴城市| 齐齐哈尔市| 镇沅| 宁强县| 平泉县| 汤阴县| 双鸭山市| 泰安市|