身份證最後一會校正碼產生演算法

來源:互聯網
上載者:User

介紹18位社會安全號碼碼最後一位校正碼的計算方法

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

校正方法:
(1)十七位元字本體碼加權求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先對前17位元字的權求和
Ai:表示第i位置上的社會安全號碼碼數字值
Wi:表示第i位置上的加權因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)計算模
Y = mod(S, 11)

(3)通過模得到對應的校正碼
     Y: 0 1 2 3 4 5 6 7 8 9 10
校正碼: 1 0 X 9 8 7 6 5 4 3 2

下面是C程式碼:
//        char szSrc1[]="11010519491231002X";
//        DoVerify(szSrc1);
//        char szSrc2[]="440524188001010014";
//        DoVerify(szSrc2);

char DoVerify(const char* pszSrc)
{
    int iS = 0;
    int iW[]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    static char szVerCode[]="10X98765432";
    int i;
    for(i=0;i<17;i++)
    {
        iS += (int)(pszSrc[i]-'0') * iW[i];
    }
    int iY = iS%11;
//    printf("%d %% 11 = iY = %d/n",iS, iY);
//    printf("%c /n",szVerCode[iY]);
    return szVerCode[iY];

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.