C#实现的18位身份证格式验证算法

C#实现的18位身份证格式验证算法,第1张

C#实现的18位身份证格式验证算法,第2张

国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中明确规定了18位身份证标准。GB11643-1999《公民身份号码》是GB11643-1989《社会保障号码》的修订版,指出原标准名称“社会保障号码”将更名为“公民身份号码”,GB11643-1999《公民身份号码》自实施之日起取代GB11643-1989。GB11643-1999《公民身份号码》的主要内容如下:
一、适用范围
本标准规定了公民身份号码的编码对象、号码结构和表示形式,使每个编码对象都能获得一个新的、不可更改的法定号码。
二。编码对象
公民身份号码的编码对象是具有中华人民共和国国籍的公民。
三。数字的结构和表达。号码结构
公民身份号码是特征组合代码,由17位的主体代码和1位的校验码组成。从左到右的顺序是:六位地址码、八位出生日期码、三位序列码和一位校验码。
2。地址码
表示编码对象常住户口所在地的县(市、旗、区)行政区划代码,按GB/T2260执行。
3。出生日期编码
表示编码对象出生的年月日,按照GB/T7408执行。日期、月份和日期代码之间没有分隔符。
4。序列码
表示同一地址码所标识的区域内同年同月同日出生的人的顺序号。序列码奇数分配给男性,偶数分配给女性。
5。校验码
(1)十七位数字本体码的加权求和公式
S = Sum(Ai * Wi),i = 0,...,16,先对前17位的权重求和
Ai:第I个位置的ID号的数字值
Wi:第I个位置的权重因子
Wi:7 9 10 58 42 1 6 3 7 9 10 58 42
(2)计算模数
Y =

(3)按模数得到对应的校验码
Y: 0 1 2 3 4 5 6 7 8 9 10
校验码:1 0 X 9 8 7 6 5 4 3 2
IV。举个例子:
北京朝阳区:11010519491231002x [/br]

下面是程序代码:
private string checkcidinfo(string cid)
{
string[]a city = new string[]{ null,null,null,null,null,null,null,null,null,"北京","天津","河北","山西","内蒙古",null,null,null,"辽宁","吉林",黑龙江",null,null,null,null,null,"山东",null,null,null,"河南","湖北",湖南",广东,"广西",海南",Null,Null,"重庆","四川","贵州","云南",西藏"。
double iSum = 0;
string info = " ";
系统。text . regular expressions . regex rg =新系统。text.regularexpressions.regex(@"^\d{17}(\d|x)$”);
系统。text . regular expressions . match MC = rg。匹配(cid);
如果(!mc。成功)
{
return " ";
}
cid = cid。to lower();
cid = cid。替换(" x "," a ");
if(a city[int . parse(cid . substring(0,2))] = = null)
{
返回“非法区域”;
}
尝试
{
DateTime。解析(cid。Substring(6,4)+"-"+cid。Substring(10,2)+"-"+cid。Substring(12,2));
}
catch
{
返回“非法生日”;
}
for(int I = 17;I > = 0;i - )
{
iSum +=(System。Math.Pow(2,i)%11)*int。Parse(cid[17-i].ToString(),系统。globalization . number styles . hex number);

}
if(iSum%11!=1)
return("非法证件号码");

return(iality[int。解析(cid。Substring(0,2))]+","+cid。Substring(6,4)+"-"+cid。Substring(10,2)+"-"+cid。Substring(12,2)+","+(int。解析(cid。Substring(16,1))% 2 = = 1 & ie xcl;“男”:“女”));

}

test:
response . write(checkcidinfo(" 340524198002300019 "));
响应。write(CheckCidInfo(" 34052419800101001 x ");

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C#实现的18位身份证格式验证算法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情