您的位置:首页 > 其它

身份证验证和15位转18位

2015-09-06 23:42 369 查看
这篇文章讲一下身份证处理的问题。在验证之前,我们要先了解一下验证方法,以下内容来自百度百科(词条:身份证校验码):

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位数字上出现罗马数字的X。如果余数是10,身份证的最后一位号码就是2;

基于如上规则,我开始写程序分别实现验证和身份证号码的转换。我们将15位的身份证直接转换为18位。代码如下:

/// <summary>
/// 身份证验证
/// </summary>
/// <param name="idCardNO"></param>
/// <returns></returns>
private string GetVerifyIDCardNO(string idCardNO)
{
//验证系数
string varifyCoefficient = "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2";

string[] idCardNumbers = new string[18];

int count = 0;
foreach (char c in idCardNO)
{
//如果是十五位则增加19
if (count == 6 && idCardNO.Length == 15)
{
idCardNumbers[count++] = "1";
idCardNumbers[count++] = "9";
}

idCardNumbers[count++] = c.ToString();
}

string[] vcs = varifyCoefficient.Split(new char[] { ',' });

int sum = 0;
//前面十七位乘以系数相加
for (int i = 0; i < idCardNumbers.Length - 1; i++)
{
sum += Convert.ToInt16(idCardNumbers[i]) * Convert.ToInt16(vcs[i]);
}

//余数对应位数
string[] trailNumbers = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };

int index = sum % 11;

idCardNumbers[17] = trailNumbers[index];

return JoinString(idCardNumbers);
}

/// <summary>
/// 数组连接
/// </summary>
/// <param name="xx">数组</param>
/// <returns></returns>
private string JoinString(string[] xx)
{
string result = string.Empty;
for (int i = 0; i < xx.Length; i++)
{
result += xx[i];
}

return result;
}


界面如图所示:



对不起,源码无法上传,没有办法提供。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息