搜档网
当前位置:搜档网 › 用 C# 实现18位身份证的验证

用 C# 实现18位身份证的验证

/*
2013年12月27日 星期五11:20:40
用户:
服务器: VEIONE
数据库: MySchool
应用程序:
*/
7 9 10 5 8 4 2 1 6 3 7 9 1 0 5 8 4 2
4 3 1 1 2 4 1 9 9 5 1 2 3 0 4 2 3 4
Grade

431124 19951230 423 4
数字地址码:431124
出生日期码:19951230
顺序码:423
校验码:4


用 C# 实现18位身份证的验证
编程开发 cyes 10个月前 (02-04) 1134浏览 1评论

在实际工作中我们经常会用到对身份证进行验证的操作,比如员工档案中身份信息的管理等等。长达18位的数字谁也不敢说每次都能绝对的输入正确,如果能对输入的身份证进行一下验证的话,会最大限度的保证资料的正确性。

接着我们来说说18位身份证的结构吧,大体可以吧18位的数字分为两个部分,前17位表示的是身份信息,也就是哪个省、哪个市,以及出生年月等等,最后一位也就是第18位是效验位,也就是用来验证前17位的信息是否正确的,如果前17位中有某个数字输入有误,那么经过换算后的结果一般情况下是不等于第18位的。

再来说说具体如何进行计算吧。这里我们需要一组固定的数字,即加权因子,一共17个,别问为什么是这17个数字,因为规定给出的就是这些数字,只管用就行了。17个数字分别为{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}。

接着我们需要一个总和,这个总和是用身份证的第i位乘以上面一组数字的第i位相加的出来的,就是 身份证的第一个数字*7+身份证的第2个数字*9…这样把17位计算完毕后会得到一个总和,我们就给这个总和起个名字吧——sum。

再来就是需要一个取余的计算了,用上面得到的总和sum与11进行取余运算,别问为什么是11,就是这么规定的,得到余数,我们给余数也起个名字yu,到这里就基本上差不多了。

接着再给出一组数字——效验位{“1″,”0″,”X”,”9″,”8″,”7″,”6″,”5″,”4″,”3″,”2″},还是那句话,别问为什么是这些数字,规定就是这样,拿来用就行了。

用身份证的效验位也就是第18位与上面那组效验位数字中的第yu个数进行比较,如何相等的话,身份证就是合法的。

下面给出一个C#代码实现对18位身份证验证地方法,大家可以参考下。





bool checkID(string id)
{
//17位加权因子
int[] wi={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};

string id17=id.Substring(0,17);//获取身份证的前17位
string idend=id.Substring(17); //获取身份证的效验位(第18位)
int sum=0;

//加权求和id[i]*wi[i]求和
for(int i=0;i<id17.Length;i++)
{
sum+=Convert.ToInt32(id17[i].ToString())*wi[i];
}

//效验码

string[] xiaoyanma={"1","0","X","9",

"8","7","6","5","4","3","2"};

// 用加权求和的值与11进行求余运算,并与效验码对应位数进行比较

if(idend==xiaoyanma[sum%11])
{
return true; //成功返回true
}
else
{
return false; //失败返回false
}
}

1、号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

2、地址码(前六位数)
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。

3、出生日期码(第七位至十四位)
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

4、顺序码(第十五位至十七位)
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

5、校验码(第十八位数)

作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么
此人的身份证就变成了19位。X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准

452223************
性 别: 女
出生日期: 1995年08月14日
发 证 地: 广西壮族自治区 柳州地区 鹿寨县


中华人民共和国行政区划代码

中华人民共和国行政区划代码:
国家基础地理信息系统地形数据库境界和居民地要素执行国家标准《中华人民共和国行政区划代码》(GB
2260-1995),并根据需要扩充了部分代码。代码的结构如下:

全国省级行政区划代码一览表:
代码省(自治区、直辖市)
110000北京市
120000天津市
130000河北省
140000山西省
150000内蒙古自治区
210000辽宁省
220000吉林省
230000黑龙江省
310000上海市
320000江苏省
330000浙江省
340000安徽省
350000福建省
360000江西省
370000山东省
410000河南省
420000湖北省
430000湖南省
440000广东省
450000广西壮族自治区
460000海南省
500000重庆市
510000四川省
520000贵州省
530000云南省
540000西藏自治区
610000陕西省
620000甘肃省
630000青海省
640000宁夏回族自治区
650000新疆维吾尔自治区
710000台湾省
810000香港特
别行政区
910000澳门特别行政区(

国家基础地理信息系统扩充代码)

相关主题