中国居民18位身份证号验证方法,Java算法实现

    public static boolean validate18Idcard(String idcard){
        if(idcard == null ) {
            return false;
        }
        if(idcard.length()!=18) {
            return false;
        }
        char [] id =idcard.toCharArray();
        int i, sum, n;
        for (sum = i = 0; i < 17; i++){
            sum += ((1 << (17 - i)) % 11) * (id[i] - '0');
        }
        n = (12 - (sum % 11)) % 11;
        if (n < 10) {
            return (n == id[17] - '0');
        } else {
            return (id[17] == 'X');
        }
    }

了解更多,请看 维基百科:https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%85%AC%E6%B0%91%E8%BA%AB%E4%BB%BD%E5%8F%B7%E7%A0%81

原文地址:https://www.cnblogs.com/demingblog/p/8185401.html

时间: 2024-10-10 01:08:55

中国居民18位身份证号验证方法,Java算法实现的相关文章

18位身份证号验证及信息获取

止乎于分享! IDCode18 = { validate: function (value) { if (value.length != 18) return false; var value = value.toLowerCase(); var sum = 0, v = '10x98765432', w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], a = '11,12,13,14,15,21,22,23,31,32,33,3

正则表达式之完美18位身份证号

匹配18位身份证号,正则表达式如下: /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/ 说明:现在身份证号都已经是18位了,没必要再去考虑匹配15位. 18位身份证号组成:6位地区号+4位年+4位月日+3位编号+1位新生成编号 逻辑: 1

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

前言 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 介绍 xxxxxx yyyy MM dd 375 0     十八位 xxxxxx    yy MM dd   75 0     十五位 地区: [1-9]\d{5} 年的前两位: (18|19|([23]\d))            1800-2399 年的后两位: \d{2} 月份: ((0[1-9])|(10|11|12)) 天

中国公民18位身份证的规则和生成随机身份证的Java代码

18位身份证验证 * 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成. * 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. * 第十八位数字(校验码)的计算方法为: * 1.将前面的身份证号码17位数分别乘以不同的系数.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 * 2.将这17位数字和系数

用DELPHI函数判断是否有效18位身份证号

uses DateUtils; const  IntMultiplication: Array[1..17] Of Integer=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); //函数名:IsRightID//参数:sID,身份证号码 (输入)//      sSex,性别       (输出)//      age,年龄        (输出)//返回值:sID是标准身份证号,返回OK,否则返回相应信息function IsRightID(sID:string

PHP隐藏身份证号中间四位(适用老版15位与18位身份证号)

// $message['idcard'] 为数据库查出来的身份证号码,若位数不符合身份证位数则会显示“身份证位数不正常” <? echo strlen($message['idcard'])==15?substr_replace($message['idcard'],"****",8,5):(strlen($message['idcard'])==18?substr_replace($message['idcard'],"****",8,7):"身

18位身份证号码结构的系数算法

看了园子里一个随笔 http://www.cnblogs.com/10158wsj/p/7050736.html 身份证17位数分别乘以不同的系数.从第1位到第17位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2. 将这17位数字和系数相乘的结果相加 将step3的结果除以11,得出余数 由于数字的特殊性,这些余数只可能是0-10这11个数字,身份证最后一位的对应数字为1-0-X-9-8-7-6-5-4-3-2.. 系数怎么来的呢? 2^7%11-2^6%1

验证中国身份证号的方法(符合GB11643-1999标准)(来源不明)

验证18位身份证号的方法(符合GB11643-1999标准) /// <summary> /// 18位身份证号码验证 /// </summary> private static bool CheckIDCard18(string idNumber) { long n = 0; if (long.TryParse(idNumber.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(idNu

python操作redis之随机生成18位身份证号码

写一个随机生成身份证号的程序,输入多少条就产生多少个,?把产生完的数据写到redis里面,key用哈希类型?Xiaohei 410881198312031241 其中配置文件confsetting.py里的常量有: # 系统常量,包含: # LAST_NAME: 姓 # FIRST_NAME: 名 # STATE_CODE:全国大陆地区及编码 REDIS_IP = '172.16.2.163' RedisIp REDIS_PORT = 6379 REDIS_PASSWD = '222333' R