日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#身份证号码校验

發布時間:2023/12/14 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#身份证号码校验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

C#實現的18位身份證格式驗證算法 18位身份證標準在國家質量技術監督局于1999年7月1日實施的GB11643-1999《公民身份號碼》中做了明確的規定。 GB11643-1999《公民身份號碼》為GB11643-1989《社會保障號碼》的修訂版,其中指出將原標準名稱"社會保障號碼"更名為"公民身份號碼",另外GB11643-1999《公民身份號碼》從實施之日起代替GB11643-1989。GB11643-1999《公民身份號碼》主要內容如下:

一、范圍

該標準規定了公民身份號碼的編碼對象、號碼的結構和表現形式,使每個編碼對象獲得一個唯一的、不變的法定號碼。

二、編碼對象

公民身份號碼的編碼對象是具有中華人民共和國國籍的公民。

三、號碼的結構和表示形式

1、號碼的結構

公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。

2、地址碼

表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。

3、出生日期碼

表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。

4、順序碼

表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。

5、校驗碼

(1)十七位數字本體碼加權求和公式

S = Sum(Ai * Wi), i = 0, ... , 16 ,先對前17位數字的權求和

Ai:表示第i位置上的身份證號碼數字值

Wi:表示第i位置上的加權因子

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

?

代碼 private?string?CheckCidInfo(string?cid)
????{
????????
string[]?aCity?=?new?string[]?{?null,?null,?null,?null,?null,?null,?null,?null,?null,?null,?null,?"北京",?"天津",?"河北",?"山西",?"內蒙古",?null,?null,?null,?null,?null,?"遼寧",?"吉林",?"黑龍江",?null,?null,?null,?null,?null,?null,?null,?"上海",?"江蘇",?"浙江",?"安微",?"福建",?"江西",?"山東",?null,?null,?null,?"河南",?"湖北",?"湖南",?"廣東",?"廣西",?"海南",?null,?null,?null,?"重慶",?"四川",?"貴州",?"云南",?"西藏",?null,?null,?null,?null,?null,?null,?"陜西",?"甘肅",?"青海",?"寧夏",?"xinjiang",?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?=?"";
????????System.Text.RegularExpressions.Regex?rg?
=?new?System.Text.RegularExpressions.Regex(@"^\d{17}(\d|x)$");
????????System.Text.RegularExpressions.Match?mc?
=?rg.Match(cid);
????????
if?(!mc.Success)
????????{
????????????
return?"";
????????}
????????cid?
=?cid.ToLower();
????????cid?
=?cid.Replace("x",?"a");
????????
if?(aCity[int.Parse(cid.Substring(0,?2))]?==?null)
????????{
????????????
return?"非法地區";
????????}
????????
try
????????{
????????????DateTime.Parse(cid.Substring(
6,?4)?+?"-"?+?cid.Substring(10,?2)?+?"-"?+?cid.Substring(12,?2));
????????}
????????
catch
????????{
????????????
return?"非法生日";
????????}
????????
for?(int?i?=?17;?i?>=?0;?i--)
????????{
????????????iSum?
+=?(System.Math.Pow(2,?i)?%?11)?*?int.Parse(cid[17?-?i].ToString(),?System.Globalization.NumberStyles.HexNumber);

????????}
????????
if?(iSum?%?11?!=?1)
????????????
return?("非法證號");

????????
return?(aCity[int.Parse(cid.Substring(0,?2))]?+?","?+?cid.Substring(6,?4)?+?"-"?+?cid.Substring(10,?2)?+?"-"?+?cid.Substring(12,?2)?+?","?+?(int.Parse(cid.Substring(16,?1))?%?2?==?1???""?:?""));

????}

?

(2)計算模

Y = mod(S, 11)

(3)通過模得到對應的校驗碼

Y: 0 1 2 3 4 5 6 7 8 9 10

校驗碼: 1 0 X 9 8 7 6 5 4 3 2

四、舉例如下:

北京市朝陽區: 11010519491231002X

廣東省汕頭市: 440524188001010014

?

?

轉載于:https://www.cnblogs.com/hendy/archive/2010/04/29/1723891.html

總結

以上是生活随笔為你收集整理的C#身份证号码校验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。