Code-Validator:验证身份证号
Posted storebook
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Code-Validator:验证身份证号相关的知识,希望对你有一定的参考价值。
ylbtech-Code-Validator:验证身份证号 |
1.返回顶部 |
1、
using System; namespace Sp.Common { public class ValidatorHelper { /// <summary> /// 身份证上数字对应的地址 /// </summary> //enum IDAddress //{ // 北京 = 11, 天津 = 12, 河北 = 13, 山西 = 14, 内蒙古 = 15, 辽宁 = 21, 吉林 = 22, 黑龙江 = 23, 上海 = 31, 江苏 = 32, 浙江 = 33, // 安徽 = 34, 福建 = 35, 江西 = 36, 山东 = 37, 河南 = 41, 湖北 = 42, 湖南 = 43, 广东 = 44, 广西 = 45, 海南 = 46, 重庆 = 50, 四川 = 51, // 贵州 = 52, 云南 = 53, 西藏 = 54, 陕西 = 61, 甘肃 = 62, 青海 = 63, 宁夏 = 64, 新疆 = 65, 台湾 = 71, 香港 = 81, 澳门 = 82, 国外 = 91 //} /// <summary> /// 验证一代身份证号(15位数) /// [长度为15位的数字;匹配对应省份地址;生日能正确匹配] /// </summary> /// <param name="input">待验证的字符串</param> /// <returns>是否匹配</returns> public static bool IsIDCard15(string input) { //验证是否可以转换为15位整数 long l = 0; if (!long.TryParse(input, out l) || l.ToString().Length != 15) { return false; } //验证省份是否匹配 //1~6位为地区代码,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。 string address = "11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91,"; if (!address.Contains(input.Remove(2) + ",")) { return false; } //验证生日是否匹配 string birthdate = input.Substring(6, 6).Insert(4, "/").Insert(2, "/"); DateTime dt; if (!DateTime.TryParse(birthdate, out dt)) { return false; } return true; } /// <summary> /// 验证二代身份证号(18位数,GB11643-1999标准) /// [长度为18位;前17位为数字,最后一位(校验码)可以为大小写x;匹配对应省份地址;生日能正确匹配;校验码能正确匹配] /// </summary> /// <param name="input">待验证的字符串</param> /// <returns>是否匹配</returns> public static bool IsIDCard18(string input) { //验证是否可以转换为正确的整数 long l = 0; if (!long.TryParse(input.Remove(17), out l) || l.ToString().Length != 17 || !long.TryParse(input.Replace(‘x‘, ‘0‘).Replace(‘X‘, ‘0‘), out l)) { return false; } //验证省份是否匹配 //1~6位为地区代码,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码。 string address = "11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91,"; if (!address.Contains(input.Remove(2) + ",")) { return false; } //验证生日是否匹配 string birthdate = input.Substring(6, 8).Insert(6, "/").Insert(4, "/"); DateTime dt; if (!DateTime.TryParse(birthdate, out dt)) { return false; } //校验码验证 //校验码: //(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 //(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 string[] arrVarifyCode = ("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 = input.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 (arrVarifyCode[y] != input.Substring(17, 1).ToLower()) { return false; } return true; } /// <summary> /// 验证身份证号(不区分一二代身份证号) /// </summary> /// <param name="input">待验证的字符串</param> /// <returns>是否匹配</returns> public static bool IsIDCard(string input) { if (input.Length == 18) return IsIDCard18(input); else if (input.Length == 15) return IsIDCard15(input); else return false; } } }
2、
2.返回顶部 |
3.返回顶部 |
4.返回顶部 |
5.返回顶部 |
6.返回顶部 |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
以上是关于Code-Validator:验证身份证号的主要内容,如果未能解决你的问题,请参考以下文章