• 算身份证最后一位


    今天遇到一个问题,根据身份证的前十七位算出第十八位,这个有明确的算法,如下所示:
    ∑(ai×Wi)(mod 11)……………………………………(1)
    公式(1)中:
    i----表示号码字符从右至左包括校验码在内的位置序号;
    ai----表示第i位置上的号码字符值;
    Wi---表示每一位对应的加权值。
    从左到右Wi的值依次为:
    Wi          7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
    然后根据公式(1)计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10: 
    公式计算结果              0 1 2 3 4 5 6 7 8 9 10
    校验码字符值              1 0 X 9 8 7 6 5 4 3 2
    这个算法实现起来倒是挺简单的,用X++里的Container比较顺手:

    static void GetLastNumber(str strIdentity)
    {
        Container factor 
    = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
        Container c 
    = [1,0,'X',9,8,7,6,5,4,3,2];
        
    int i;
        
    int j;
        ;

        
    if(strlen(strIdentity)!=17)
            
    throw info("请输入17位有效数字!");

        
    for(i=1;i<=17;i++)
            j 
    += str2int(substr(strIdentity,i,1))*conpeek(factor,i);

        j 
    = j mod 11;

        Box::info(strfmt(
    "您身份证最后一位是:%1",j==2? conpeek(c,j+1):int2Str(conpeek(c,j+1))));
    }

    当然这里没有检查每一个字符是不是有效数字。

  • 相关阅读:
    倒计时功能的实现
    getElementsByClassName
    模拟滚动条
    display:table-cell
    gulp相关知识(2)
    gulp相关知识(1)
    移动端的网页试做
    关于移动端的布局
    伪类before和after
    简单时钟——css3
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/706211.html
Copyright © 2020-2023  润新知