using System;/// <summary>
/// Summary description for IDCardValid
/// </summary>
public class IDCardValid
{public IDCardValid(){//
        // TODO: Add constructor logic here
        //
    }/// <summary>
    /// 验证身份证号码
    /// </summary>
    /// <param name="Id">身份证号码</param>
    /// <returns>验证成功为True,否则为False</returns>
    public static bool CheckIDCard(string Id){if (Id.Length == 18){bool check = CheckIDCard18(Id);return check;}else if (Id.Length == 15){bool check = CheckIDCard15(Id);return check;}else{return false;}}
    #region 身份证号码验证
/// <summary>
    /// 验证15位身份证号
    /// </summary>
    /// <param name="Id">身份证号</param>
    /// <returns>验证成功为True,否则为False</returns>
    private static bool CheckIDCard18(string Id){long n = 0;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){return false;//数字验证
        }string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";if (address.IndexOf(Id.Remove(2)) == -1){return false;//省份验证
        }string birth = Id.Substring(6, 8).Insert(6, "-").Insert(4, "-");DateTime time = new DateTime();if (DateTime.TryParse(birth, out time) == false){return false;//生日验证
        }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 = 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 (arrVarifyCode[y] != Id.Substring(17, 1).ToLower()){return false;//校验码验证
        }return true;//符合GB11643-1999标准
    }/// <summary>
    /// 验证18位身份证号
    /// </summary>
    /// <param name="Id">身份证号</param>
    /// <returns>验证成功为True,否则为False</returns>
    private static bool CheckIDCard15(string Id){long n = 0;if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14)){return false;//数字验证
        }string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";if (address.IndexOf(Id.Remove(2)) == -1){return false;//省份验证
        }string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");DateTime time = new DateTime();if (DateTime.TryParse(birth, out time) == false){return false;//生日验证
        }return true;//符合15位身份证标准
    }
    #endregion
}

转载于:https://www.cnblogs.com/leonardleonard/archive/2008/07/03/1927889.html

中国身份证号码验证,支持15,18位,可验证成功90%的身份证号相关推荐

  1. Jquery 对 身份证号码的验证 (15/18位)

    //欢迎验证.给予指正错误,从好多地方查来的资料修改的...已用本人身份证验证... 由于以前修改的问题无法验证带 X 的身份证号码,已修复!//为值添加0function Append_zore(t ...

  2. 简单的关于身份证(15位或者18位)合法性验证

    简单的关于身份证(15位或者18位)合法性验证 package com.clark.test.idcard;/*** 测试校验身份证合法性的小程序* <p>我们常用的身份证号码为18位或者 ...

  3. 身份证校验(//身份证号合法性验证 //支持15位和18位身份证号//支持地址编码、出生日期、校验位验证)

    window.checkIdNumber=(function () {var vcity = {11: "北京", 12: "天津", 13: "河北 ...

  4. 15/18位身份证号码验证的正则表达式总结(详细版)

    前言 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 介绍 xxxxxx yyyy MM d ...

  5. 15/18位身份证号码验证

    15/18位身份证号码验证 在做身份证验证之前你得明确身份证号的组成. 首先我告诉你,18位身份证号码后面的字母只有"X"这一个.(X是罗马数字的10,用X来代替10,可以保证您的 ...

  6. 使用Java编写Hive的UDF实现身份证号码校验及15位升级18位

    使用Java编写Hive的UDF实现身份证号码校验及15位升级18位 背景 在数仓项目中,有时候会根据身份证信息做一些取数filter或者条件判断的相关运算进而获取到所需的信息.古人是用Oracle做 ...

  7. 身份证号码含义及最后一位校验算法(ISO 7064:1983.MOD 11-2)

    身份证的各位数字代表的含义 ISO 7064:1983.MOD11-2校验码计算法 : (身份证校验码-第18位) 校验码计算(Python 代码) 身份证的各位数字代表的含义 1.前1.2位数字表示 ...

  8. 身份证号码工具类(15位,18位,10位)

    解析身份证信息的工具类,包括获得身份证的出生日期,性别,身份证省份,留作自用 import java.text.ParseException; import java.text.SimpleDateF ...

  9. Java身份证号码严格验证(第18位校验码算法实现)

    /*** 身份证号码的格式:610821-20061222-612-X 由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,* 第18位为校验码.检验码分别是0-10共 ...

最新文章

  1. 《架构漫谈》读书笔记五
  2. 获取内容第一张图片地址的函数
  3. 开源作品ThinkJDBC—一行代码搞定数据库操作
  4. shell脚本自动回车_干货分享:Linux shell脚本分享!!快收藏起来吧
  5. Wasserstein GAN最新进展:从weight clipping到gradient penalty,更加先进的Lipschitz限制手法
  6. (视频+图文)机器学习入门系列-第1章 引言
  7. LeetCode 437. Path Sum III (STL map前缀和)
  8. [恢]hdu 2012
  9. Android自定义view之ViewPager指示器——2
  10. 华为库存至少够缓冲一年;张朝阳质疑 5G 微波危害;苹果iOS 13不受支持机型曝光 | 极客头条...
  11. 屏幕方向调节---LANDSCAPE与PORTRAIT
  12. chpater 2 : InnoDB存储引擎
  13. php,javascript获取传递各参数的用法
  14. 在GlassFish中应用Hibernate
  15. 多线程之线程池Executor应用
  16. 据当前时间获取本学期周次
  17. 【传感器大赏】压电薄膜震动传感器
  18. COleDateTime SYSTEMTIME CTime
  19. JavaScript-WebAPIs学习记录
  20. 烽火狼烟丨Fastjson反序列化漏洞风险提示

热门文章

  1. python3 案例分享-seaborn demo
  2. java 8进制串转中文_老杜带你学Java【第六课】
  3. 教你不编程快速解析 JSON 数据
  4. DenyHosts阻止SSH暴力攻击
  5. 巧用Windows Media Player翻录功能,把光盘上cd曲目复制到电脑。
  6. 堪比法拉利!欧洲四向车搬运行李实录
  7. cosmic_python
  8. 西安交大城市学院计算机怎么,西安交大城市学院计算机系在“量子计算机”教研领域获得显著进展...
  9. 房产科把用户申请表输入计算机后,系统首先检查申请表的合法性,房产管理系统.doc...
  10. 中国石油大学(北京)《软件工程》网考题