国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#身份證驗證

2019-11-17 03:54:19
字體:
來源:轉載
供稿:網友
因做項目需要,參考網上資料寫了一個身份證驗證的C#方法,本方法是在VS2005[C/S] 下寫的。    
/*
         * 理論部分:
         * 15位身份證號碼=6位地區代碼+6位生日+3位編號
         * 18位身份證號碼=6位地區代碼+8位生日+3位編號+1位檢驗碼
         *
         * 各省市地區國家代碼前兩位代碼是:     
         * 北京 11 吉林 22 福建 35 廣東 44 云南 53 天津 12 黑龍江 23 江西 36 廣西 45 西藏 54 河北 13 上海 31 山東 37 海南 46 陜西 61 山西 14 江蘇 32 河南 41 重慶 50
        甘肅 62 內蒙古 15 浙江 33 湖北 42 四川 51 青海 63 遼寧 21 安徽 34 湖南 43 貴州 52 寧夏 64 新 疆 65 臺灣 71 香港 81 澳門 82 國外 91   
        *18位身份證標準在國家質量技術監督局于1999年7月1日實施的GB11643-1999《公民身份號碼》中做了明確規定。
        *GB11643-1999《公民身份號碼》為GB11643-1989《社會保障號碼》的修訂版,其中指出將原標準名稱“社會保障號碼”更名為“公民身份號碼”,另外GB11643-1999《公民身份號碼》從實施之日起代替GB11643-1989。
        *公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位校驗碼。其含義如下:
        *1. 地址碼:表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。
        *2. 出生日期碼:表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日分別用4位、2位、2位數字表示,之間不用分隔符。
        *3. 順序碼:表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
        *校驗的計算方式:
        *1. 對前17位數字本體碼加權求和
        *公式為:S = Sum(Ai * Wi), i = 0, ... , 16
        *其中Ai表示第i位置上的身份證號碼數字值,Wi表示第i位置上的加權因子,其各位對應的值依次為:
        *7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
        *2. 以11對計算結果取模
        *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
        */
        代碼
1  /// <summary>
2         /// 身份證驗證
3         /// </summary>
4         /// <param name="Id">身份證號</param>
5         /// <returns></returns>
6         public bool CheckIDCard(string Id)
7         {
8             if (Id.Length == 18)
9             {
10                 bool check = CheckIDCard18(Id);
11                 return check;
12             }
13             else if (Id.Length == 15)
14             {
15                 bool check = CheckIDCard15(Id);
16                 return check;
17             }
18             else
19             {
20                 return false;
21             }
22         }
23         /// <summary>
24         /// 18位身份證驗證
25         /// </summary>
26         /// <param name="Id">身份證號</param>
27         /// <returns></returns>
28         PRivate bool CheckIDCard18(string Id)
29         {
30             long n = 0;
31             if (long.TryParse(Id.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(Id.Replace('x', '0').Replace('X', '0'), out n) == false)
32             {
33                 return false;//數字驗證
34             }
35             string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
36             if (address.IndexOf(Id.Remove(2)) == -1)
37             {
38                 return false;//省份驗證
39             }
40             string birth = Id.Substring(6, 8).Insert(6, "-").Insert(4, "-");
41             DateTime time = new DateTime();
42             if (DateTime.TryParse(birth, out time) == false)
43             {
44                 return false;//生日驗證
45             }
46             string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
47             string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
48             char[] Ai = Id.Remove(17).ToCharArray();
49             int sum = 0;
50             for (int i = 0; i < 17; i++)
51             {
52                 sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
53             }
54             int y = -1;
55             Math.DivRem(sum, 11, out y);
56             if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())
57             {
58                 return false;//校驗碼驗證
59             }
60             return true;//符合GB11643-1999標準
61         }
62         /// <summary>
63         /// 15位身份證驗證
64         /// </summary>
65         /// <param name="Id">身份證號</param>
66         /// <returns></returns>
67         private bool CheckIDCard15(string Id)
68         {
69             long n = 0;
70             if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14))
71             {
72                 return false;//數字驗證
73             }
74             string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
75             if (address.IndexOf(Id.Remove(2)) == -1)
76             {
77                 return false;//省份驗證
78             }
79             string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");
80             DateTime time = new DateTime();
81             if (DateTime.TryParse(birth, out time) == false)
82             {
83                 return false;//生日驗證
84             }
85             return true;//符合15位身份證標準
86         }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武强县| 青海省| 咸阳市| 临潭县| 平乡县| 辽中县| 武功县| 科技| 古田县| 蒙阴县| 龙游县| 分宜县| 准格尔旗| 封丘县| 黑龙江省| 东阳市| 波密县| 新宁县| 财经| 许昌市| 永平县| 青田县| 浦东新区| 牟定县| 南丹县| 夹江县| 临夏县| 长葛市| 定兴县| 英德市| 西峡县| 赣榆县| 夏津县| 阿拉善右旗| 韩城市| 宁城县| 龙泉市| 伽师县| 渭源县| 区。| 卫辉市|