Skip to content

Instantly share code, notes, and snippets.

@shepherdwind
Created June 6, 2014 11:54
Show Gist options
  • Save shepherdwind/fd75dbda4f81be714dd5 to your computer and use it in GitHub Desktop.
Save shepherdwind/fd75dbda4f81be714dd5 to your computer and use it in GitHub Desktop.

Revisions

  1. shepherdwind created this gist Jun 6, 2014.
    43 changes: 43 additions & 0 deletions idcard.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,43 @@
    /**
    * 15位身份证转换为18位
    *
    */
    function getIdCardNumber18(idCardNumber){
    if (!idCardNumber) {
    return null;
    }
    // 转换为字符串
    idCardNumber = '' + idCardNumber;

    if (idCardNumber.length === 18) {
    return idCardNumber;
    } else if (idCardNumber.length !== 15) {
    return null;
    }

    /* 首先将身份证号码扩展至17位: 将出生年扩展为19XX的形式 */
    var idCardNumber17 = idCardNumber.substring(0, 6) + "19" + idCardNumber.substring(6);

    /* 计算校验码 */
    var nSum = 0;

    for (var nCount = 0; nCount < 17; nCount++) {
    nSum += (parseInt(idCardNumber17[nCount], 10) * (Math.pow(2, 17 - nCount) % 11));
    }

    nSum = nSum % 11;

    if (nSum <= 1) {
    nSum = 1 - nSum;
    } else {
    nSum = 12 - nSum;
    }
    /*
    * BUGFIX:18位身份证最后一位应该是X
    */
    if (nSum === 10) {
    return idCardNumber17 + "X";
    } else {
    return idCardNumber17 += nSum;
    }
    }