您的位置:首页 > 其它

身份证效验

2016-05-17 22:12 162 查看
/// 作者:林宏权
/// http://www.songzhuren.com/ ///
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace IDCardCheck
{
class IDCard
{

//加权算法第一位到第十七位的系数:
int[] iW = new int[] { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};

//身份证效验码字符串,与加权算法对位对应.
string Lastcode = "10X98765432";

/// <summary>
/// 获取身份证的第18位效验码.
/// </summary>
/// <param name="remainder"></param>
/// <returns>第18位效验码字字符串.</returns>
public string GetLastCode(int remainder)
{
//根据加权算法所获取的余数,返回对应的效验码.
return Lastcode[remainder].ToString();
}

/// <summary>
/// 通过加权算法,获取效验码的余数.
/// </summary>
/// <param name="IDCardNumber"></param>
/// <returns></returns>
public int GetTheRemainder(string IDCardNumber)
{
int theSum = 0;
//通过加权算法,求出身份证前17位的加权和.
for (int position = 0; position < 17;position++ )
{
theSum += int.Parse(IDCardNumber[position].ToString()) * iW[position];

}
//加权和 除以 11 所得的余数为实验码对应余数.
return theSum % 11;
}
}
}


第十八位数字的计算方法为:

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。

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。

首先:我们得出,前17位的乘积和是189

然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。

最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。

第一位到第十七位的系数:

7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(17位数字和系数相乘的结果相加 / 11) = 余数

余数范围:

0 1 2 3 4 5 6 7 8 9 10

余数对就数字:

1 0 X 9 8 7 6 5 4 3 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: