然后再写一个18位身份证的判断类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/// <summary> /// 中国大陆身份证判断。用于18位判断 /// /// <see cref="!:https://blog.csdn.net/s1102379635/article/details/7967179"/> /// <see cref="!:https://blog.csdn.net/qq_26545305/article/details/75042982"/> /// /// 前1、2位数字表示:所在省(直辖市、自治区)的代码; /// 第3、4位数字表示:所在地级市(自治州)的代码; /// 第5、6位数字表示:所在区(县、自治县、县级市)的代码; /// 第7—14位数字表示:出生年、月、日; /// 第15、16位数字表示:所在地的派出所的代码(身份证背面的签发机关); /// 第17位数字表示性别:奇数表示男性,偶数表示女性; /// 第18位数字是校检码(个人信息码)(有的人是可能是x,这代表的是10罗马数字); /// </summary> public class ChineseId18Bit : ChineseIdBase { /// <summary> /// 验证18位身份证号 /// </summary> /// <param name="id">身份证号</param> /// <returns>验证成功为True,否则为False</returns> public override bool IsGrant( string id) { if ( string .IsNullOrWhiteSpace(id)) { return false ; } if (id.Length != 18) { return false ; } //数字校验 if (! this .CheckNumber(id)) { return false ; } //省市区区域校验,身份前2位拿来判断 if (! this .CheckAddress(id)) { return false ; } //生日验证 if (! this .CheckBirth(id)) { return false ; } //判断校验码 if (! this .CheckVerifyCode(id)) { return false ; } return true ; //符合GB11643-1999标准 } /// <summary> /// 数字验证 /// </summary> /// <param name="id">身份证号</param> /// <returns></returns> protected override bool CheckNumber( string id) { if ( long .TryParse(id.Remove(17), out long n) == false || n < Math.Pow(10, 16) || long .TryParse(id.Replace( 'x' , '0' ).Replace( 'X' , '0' ), out n) == false ) { return false ; //数字验证 } return true ; } /// <summary> /// 针对15位身份证校验生日。取身份证上的第7-14位字符来判断 /// </summary> /// <param name="id">身份证号</param> /// <returns></returns> protected override bool CheckBirth( string id) { string birth = id.Substring(6, 8).Insert(6, "-" ).Insert(4, "-" ); DateTime time = new DateTime(); if (DateTime.TryParse(birth, out time) == false ) { return false ; //生日验证 } return true ; } /// <summary> /// 检测检验码 /// </summary> /// <param name="id">身份证号</param> /// <returns></returns> private bool CheckVerifyCode( string id) { string [] vi = ( "1,0,x,9,8,7,6,5,4,3,2" ).Split( ',' ); string [] wi = ( "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2" ).Split( ',' ); char [] ai = id.Remove(17).ToCharArray(); int sum = 0; for ( int i = 0; i < 17; i++) { sum += int .Parse(wi[i]) * int .Parse(ai[i].ToString()); } int y = -1; Math.DivRem(sum, 11, out y); if (vi[y] != id.Substring(17, 1).ToLower()) { return false ; //校验码验证 } return true ; } } |
最新更新
C#教程之【朝花夕拾】设计模式之单例模
C#教程之提供一个中国身份证号码判断的
C#教程之高压电工-复审
C#教程之微信小程序代办清单任务之语言
C#教程之C#默认参数原理探究
C#教程之持续集成之 Nuget 进阶
C#教程之C#中USB转串口的拔插捕获
C#教程之C# 创建含多层分类标签的Excel图表
C#教程之C# 虚拟串口通信
C#教程之C# 虚拟串口通信
asp.net教程之纯ASP上传图像文件到数据库实
asp.net教程之ASP错误处理
asp.net教程之ASP网站防范黑客技巧
asp.net教程之用ASP取出HTML里面的图片地址
asp.net教程之ASP实现网页打开任何类型文件
asp.net教程之ASP木马Webshell安全解决办案
asp.net教程之几招让你的网站免受采集之苦
asp.net教程之ASP使用MYSQL数据库全攻略
asp.net教程之Ad Rotator 组件参考
asp.net教程之在Asp中使用存储过程数值类型
MySQL教程之[MySQL] mysql int后面的数字与前导
MySQL教程之[MySQL] 联合索引与using index co
mysql 多主
MySQL教程之常用SQL语句
MySQL教程之MySQL 笔记整理(13) --为什么数
DCL
MySQL教程之mysql(三)
MySQL教程之mysql(五)
MySQL教程之MySQL中SELECT语句简单使用
MySQL教程之MySQL中SELECT语句简单使用