问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#winform中如何限制txtbox输入只能是数字和特定字母X,我想做一个...

发布网友 发布时间:2024-10-08 04:49

我来回答

5个回答

热心网友 时间:2024-10-25 13:20

C#身份证验证
因做项目需要,参考网上资料写了一个身份证验证的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 }

热心网友 时间:2024-10-25 13:20

用正则表达式验证:
15位或18位正则
^\d{15}$/ | ^\d{17}(?:\d|x)$/

热心网友 时间:2024-10-25 13:18

在txtbox的Key_Press事件里写如下代码:
if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 8) &&e.KeyChar!='X')
{ e.Handled = true; }

热心网友 时间:2024-10-25 13:21

使用正则表达式 \d{3}-\d{8}|\d{4}-\d{7}

foundMatch = Regex.IsMatch(SubjectString, 正则表达式");
asp.net中应该有那个属性,winform中应该没有吧~@~
用代码写吧~~!

热心网友 时间:2024-10-25 13:15

可以用正则表达式验证。 /\d{1,}/

热心网友 时间:2024-10-25 13:17

C#身份证验证
因做项目需要,参考网上资料写了一个身份证验证的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 }

热心网友 时间:2024-10-25 13:21

用正则表达式验证:
15位或18位正则
^\d{15}$/ | ^\d{17}(?:\d|x)$/

热心网友 时间:2024-10-25 13:18

在txtbox的Key_Press事件里写如下代码:
if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar != 8) &&e.KeyChar!='X')
{ e.Handled = true; }

热心网友 时间:2024-10-25 13:22

使用正则表达式 \d{3}-\d{8}|\d{4}-\d{7}

foundMatch = Regex.IsMatch(SubjectString, 正则表达式");
asp.net中应该有那个属性,winform中应该没有吧~@~
用代码写吧~~!

热心网友 时间:2024-10-25 13:24

可以用正则表达式验证。 /\d{1,}/
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
求助:补全成语. _然而止、_然不屈、_然四顾、_然若失、_然而至、_然拒绝、_然无声... 我姑妈(姑妈去世),现奶奶的房产 姑妈的女儿有继承权吗? 丈夫去世遗产应该能怎么分配 《人世间》骆士宾遗产股权归谁所有 为什么说曹珊不应该得罪水自流_百 ... 有谁知我国十大元帅及十大上将? 解放中国的10大元帅是那几个? 对中国有何影响? 中国历史上的十大元帅 为什么中国过去有元帅现在没有了 ...想看中国80年代、90年代热播的电视剧,《渴望》、《蛙女》等,越多... ...录音、短视频、直播」路上不迷路!声卡什么牌子的音质比较好_百度... 各位推荐个声卡,要那种好一点的 唱歌录音用的 4百左右 还有耳麦 和... ...一个符号向量,例如:y=[x1,x2,x3, ... ,x99],该怎么办啊?_百度知 ... 本人是唱歌爱好者、想用家里电脑录歌、求推荐声卡和麦。 谁能给我个方案,如何让我一个月练出腹肌,胸肌,还有胳膊上的肌肉,要明... 我已经徒手做了半个月的俯卧撑了,谁能给我个健身计划 如何挑选新鲜好吃的石榴 石榴的挑选方法 跑跑卡丁车手游时间商店道具推荐 单刷15连刷哪个好 跑跑卡丁车手游酷币有什么用 怎么拿来买赛车 跑跑卡丁车手游泰坦值得入手吗 泰坦赛车购买建议 ...请问有什么方法找回呢,我没她电话,但她有我的。 微信订阅号、服务号、企业号,作为企业应该选择哪一个? ...HD 7450M+AMD Radeon HD 6480G交火后能和英伟达的那个显卡有一... 知识产权五笔怎么打 英伟达驱动里那个faxx要一直开启吗?我显卡是970,开了faxx别的没问题,但... 知道英伟达的显卡可以进入面板设置最佳的游戏性能,我的是英特尔的,不知... 为什么我国不拆开英伟达显卡研究,造出自己的国产显卡? 陈若仪自曝林志颖前任是林心如,是为了蹭热度吗? 一块正方体石料。棱长5分米。如果1立方分泌石料重2千克,这根石料重多... ...石料的体积是多少立方分米?如果一立方分米石料重2.7千克这块石料_百... \ x是什么意思, c++11中的? ...其方程为z=41?x216?y236,求下雨时过房顶上点P(1,3,11)处的雨水留下... C语言转移字符常量的十六进制能以"0x"开头吗? 怎样挑选味道好的石榴? 电动喷雾器充电器上的整流二极管击穿看不清型号,能用电动车充电器... 这是玫红还是酒红石榴石? 2017婚礼注意!Pantone公布十大秋冬色 凑十法是用在什么地方的呢? 朱泪儿人物评价 什么样的笔记本配置玩魔兽世界不卡 玩起来要顺畅 推荐几款可以玩魔兽世界的笔记本5000以下 我想买一款能玩魔兽世界80的笔记本电脑 最好是联想Y或Think的Y460没货... 想买个笔记本 价格4000左右 能玩魔兽世界的 谁能推荐个啊 怎么把文本框内的数字改成字体啊? 新瑞鹏冲刺上市:持续亏损,旗下宠物医院屡被罚,彭永鹤为董事长 瑞鹏宠物医院带您了解卡尔特猫 蔡甸区好细小病菌价格 我女儿20天了还没取名字请大家帮忙取个有诗意的的字本人姓马!拜托! 姓张2014马尾带草字头一个字的名字姓张2014.11.15凌晨3.40男孩 英语作文 急!在线等!