当前位置:首页 > 网站应用 > 正文内容

js实现批量生成18位身份证号码

cjw1231年前 (2023-11-01)网站应用1750
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>批量生成18位身份证号码</title>
<script language="JavaScript">
<!--
var areaCode = {
    '43':'湖南省','4324':'湖南省XX市',
    '432427':'湖南省XX市XX县'
}

/**删除左右两端的空格**/
function trim(str) {
    return str.replace(/(^\s*)|(\s*$)/g, "");
}

/**根据15位身份证或者18位身份证的前17位生成18位身份证号码*/
function getCheckID(_pid) {
    var arrVerifyCode = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2];
    var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    if (_pid.length != 15 && _pid.length != 17) return(false);
    var ai = (_pid.length == 17) ? _pid : _pid.substr(0,6) + "19" + _pid.substr(6);
    if (!/^\d+$/.test(ai)) return(false);
    var yyyy = ai.substr(6, 4), mm = ai.substr(10, 2) - 1, dd = ai.substr(12, 2);
    var d = new Date(yyyy,mm,dd), year = d.getFullYear(), mon = d.getMonth(), day = d.getDate(), now = new Date();
    if (year != yyyy || mon != mm || day != dd || d > now || now.getFullYear() - year > 140) return(false);
    for(var i = 0, ret = 0; i < 17; i++) ret += ai.charAt(i) * wi[i];
    ai += arrVerifyCode[ret %= 11];
    return(ai);
}

/**判断输入的15位或者18位身份证号码是否合法*/
function ParseID(pId) {
    var arrVerifyCode = [1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2];
    var wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    if (pId.length != 15 && pId.length != 18) return("身份证号码只能是15位或18位!");
    var ai = (pId.length == 18) ? pId.substr(0,17) : pId.substr(0,6) + "19" + pId.substr(6);
    if (!/^\d+$/.test(ai)) return("身份证除最后一位外,必须为数字!");
    var yyyy = ai.substr(6, 4), mm = ai.substr(10, 2) - 1, dd = ai.substr(12, 2);
    var d = new Date(yyyy,mm,dd), year = d.getFullYear(), mon = d.getMonth(), day = d.getDate(), now = new Date();
    if (year != yyyy || mon != mm || day != dd || d > now || now.getFullYear() - year > 140) return("身份证出生年月日输入错误!");
    for(var i = 0, ret = 0; i < 17; i++) ret += ai.charAt(i) * wi[i];
    ai += arrVerifyCode[ret %= 11];
    return ((pId.length == 18 && pId.toLowerCase() != ai) ? "身份证输入错误,正确的为\n" + ai + "!" : ai);
}

/**根据身份证取 省份,生日,性别*/
function getInfo(pid) {    
    _id = ParseID(pid)
    if (isNaN(_id.substr(0, 17))) return "错误的身份证号码" 
    var _id = String(_id), sex = _id.substr(17, 1) % 2 ? "女" : "男";
    prov = areaCode[_id.substr(0,6)] || areaCode[_id.substr(0,4)] || areaCode[_id.substr(0,2)] || "无法确定";
    var birthday = (new Date(_id.substr(6,4), _id.substr(10,2) - 1, _id.substr(12,2))).toLocaleDateString() 
    return [prov,birthday,sex];
}

/**生成一定范围的随机数*/
function fRandomBy(under, over){ 
    switch(arguments.length){ 
        case 1: 
            return parseInt(Math.random() * under+1); 
        case 2: 
            return parseInt(Math.random() * (over-under+1) + under);  
        default: 
            return 0;
    }
}

/**随机生成一个身份证*/
function RandomCreateID() {
    function _RandomCreateID() {
        var aid = 432427, ac = null, yyyy = 0, mm = 0, dd = 0, rnd = 0;
        yyyy = fRandomBy(1940,1990), mm = fRandomBy(1,12), dd = fRandomBy(1,31);
        rnd = fRandomBy(1,999);
        mm = (mm < 10) ? ("0" + mm) : mm;
        dd = (dd < 10) ? ("0" + dd) : dd;
        return("" + aid + yyyy + mm + dd + rnd);
    }
    
    var ff = false;
    //如果生成的身份证校验不通过,则再生成,直到校验通过为止
    while (!ff) {
        ff = getCheckID(_RandomCreateID());
    }
    return(ff);
}

/**批量生成身份证*/
function createid() {
    var count = document.getElementById("txt");
    var cnt = count.value;
    var info = document.getElementById("info");
    info.innerHTML = "";
    cnt = trim(cnt);
    if (!isNaN(cnt)) {
        cnt = cnt < 0 ? cnt = 10 : cnt;
        cnt = cnt > 200 ? cnt = 100 : cnt;
        for (i = 0; i < cnt; i++) {
            var t = RandomCreateID();
            info.innerHTML += "<font color=\"#9900FF\">" + t + "</font> " + getInfo(t) + "<br>";
        }
    } else {
        info.innerHTML = "<font color=\"#FF0000\">不是数字!</font>";
    }
    count.focus;
    count.select();
}
//-->
</script>
</head>

<body>
使用说明:<br>
在“数量”中输入阿拉伯数字,点击“生成”,可以生成数量个随机身份证号码! <hr>
<div id="query" align="center">
 数量:<input id="txt" type="text" name="qrytxt" size="20"> <br>
 <br>
 <input type="button" value="生成" name="btncreate" onclick="createid()"> <hr>
 <div id="info" align="left">
 </div>
</div>
</body>
</html>

1.jpg

说明

1.isNaN()函数可用于判断其参数是否是 NaN,该值表示一个非法的数字(比如被 0 除后得到的结果)。如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。

2.校验身份证上的号码是否正确,是获得身份证上的年、月、日做为Date的入参,得到一个日期,再比较这两个日期的年、月、日是否相等。

3.当然,这里还校验了出生日期不能是140年以前,因为好像还没有人寿命达到或超过140岁。

4.获得地区(省、市、区/县)在生产系统中,应该是通过基础数据获得。

5.根据身份证取省份、生日、性别信息前对身份证号码的合法性校验,在这里可以不要,因为在前面的逻辑中有校验。但从模块功能来讲,是有必要的。


扫描二维码推送至手机访问。

版权声明:本文由追求完美发布,如需转载请注明出处。

本文链接:https://cjw123.com/blog/?id=41

标签: JS
分享给朋友:

相关文章

html meta标签屏蔽搜索引擎的用法

html页面中的 meta 标签可以用来识别搜索引擎的蜘蛛类型,可以规定meta标签所在的html页面是否被蜘蛛抓取,下面是这个meta标签的用法,大家可以借鉴一下。搜索引擎的 meta 标签的解析下面是meta标签对搜索引擎的解析<meta name='robot...

8 种在 CSS 中隐藏元素的方法汇总

作为 Web 开发人员,我们经常遇到需要隐藏网页上的元素的情况。在本文中,我们将分享8 种在 CSS 中隐藏元素的方法,每种方法都有优点和注意事项。1.Opacity and Filter: Opacity隐藏元素最简单的方法之一是调整其不透明度。opacity 属性允许我们通过将其值设置为 0 来...

纯CSS实现侧边栏浮动在线客服效果

很多人一般在网页的侧边会选择放一个悬浮的在线客服,方便意向客户的联系,网上随便一搜也会有很多代码提供,但是大多都是JS书写的,并且夹带着一些图片素材乱七八糟的东西,用起来很不方便。今天我们就教给大家一个纯css书写的在线客服效果首先我们有如下html结构<div class=&quo...

谷歌免费网站ico图标接口

分享个免费有用的ico图标的接口,可以使用谷歌提供的友链ico接口读取网址的ico图标,就可以很轻松的实现为网站友情链接增加ico图标。ico图标接口:https://t1.gstatic.cn/faviconV2?client=SOCIAL&type=FAVICON&fallbac...

网站js防扒代码-禁止右键/F12/调试自动关闭窗口

非常暴力。宣称可以禁用所有一切可以进入开发者工具的方法,防止通过开发者工具进行的 "代码搬运"1.效果演示演示站以及原文地址:https://theajack.github.io/disable-devtool/说明:此法较为非常j狠。宣称可以禁用所有一切可以进入开发者工具的方法...

js打印文字打字输出特效代码

<center> <style type="text/css"> .a{background:#666666; border:0px solid #000000; width:300px; h...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。