PHP完毕中华人民共和国人民身份证号码有效性验证示例代码,验证身份证音信灵通

By admin in 4858美高梅 on 2019年5月5日

本篇目录:

近日亟待对身份证合法性实行验证,实名认证是不愿意了,可是原来的证实规则太过粗略,只是简单的验证了身份证尺寸,现在事务必要巩固下身份证注明规则,英特网找到了重重材质,可是都不合偶的意志,无奈只能一向写一个,代码照旧用本人的舒服哈。

以下是依靠身份证号码编码规则,使用JS对其张开有效验证代码

本文将运用Java实现中中原人民共和国百姓(1多个人如故20人)身份证编号的连锁表明,功效如下:

  • 壹.截取钦点字节数的字符串
  • 二.决断是还是不是微信
  • 三.到手时间格式的多少个比喻
  • 四.获得字符串字节长度
  • 伍.对象克隆、深拷贝
  • 陆.组织结构代码证验证
  • 7.身份证号验证
  • 8.js正则为url添加http标识
  • 九.U汉兰达L使得校验方法
  • 10.自定义jsonp方法
  • 11.cookie操作
  • 1二.生成自由字符串 (可钦点长度)
  • 壹三.浏览器判别
  • 1四.Rem运动端适配
  • 15.获取url后参数
  • 1陆.动态加载JS
  • 一柒.生成自由颜色值

已兑现效益:扶助二1三个人和1十一人身份证号,帮忙地方编码、出出生之日期、校验位验证。

IdCard-Validate.js代码如下:

  1. 身份证号有效性验证
  2. 剖析详细身份证信息
  3. 浮动三个虚构的省份证号码。

上述格局都是平凡专业中使用所得,所以会波动时更新,大家也能够留下您以为好的章程:)

基于〖中国国标 GB
116四三-一九玖陆〗中有关羽民身份号码的规定,公民身份号码是特色组合码,由十7位数字本体码和一人数字校验码组成。排列顺序从左至右依次为:伍人数字地址码,5位数字出出生之日期码,四位数字顺序码和壹个人数字校验码。

复制代码 代码如下:

身份证编号证实

1.截取钦命字节数的字符串

/**
 * 截取指定字节的字符串
 * @param str 要截取的字符穿
 * @param len 要截取的长度,根据字节计算
 * @param suffix 截取前len个后,其余的字符的替换字符,一般用“…”
 * @returns {*}
 */
function cutString(str, len, suffix) {
  if (!str) return "";
  if (len <= 0) return "";
  if (!suffix) suffix = "";
  var templen = 0;
  for (var i = 0; i < str.length; i++) {
    if (str.charCodeAt(i) > 255) {
      templen += 2;
    } else {
      templen++
    }
    if (templen == len) {
      return str.substring(0, i + 1) + suffix;
    } else if (templen > len) {
      return str.substring(0, i) + suffix;
    }
  }
  return str;
}
复制代码
  • 地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。
  • 出破壳日期码表示编码对象出生的年、月、日,当中年度用四人数字代表,年、月、日时期不用分隔符。
  • 顺序码表示1致地址码所标记的区域限制内,对同龄、月、日出生的人口编定的顺序号。顺序码的奇数分给男子,偶数分给雌性人类。
  • 校验码是依照前边二十一位数字码,依照ISO 706四:1九八3.MOD
    1一-贰校验码总括出来的核实码。

/**
* 身份证17人编码规则:dddddd yymmdd xx p
* dddddd:地区码
* yymmdd: 出生年月日
* xx: 顺序类编码,不能够分明
* p: 性别,奇数为男,偶数为女
* <p />
* 身份证十七个人编码规则:dddddd yyyymmdd xxx y
* dddddd:地区码
* yyyymmdd: 出生年月日
* xxx:顺序类编码,无法明确,奇数为男,偶数为女
* y: 校验码,该位数值可经过前1六个人乘除得到
* <p />
* 1陆人号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3,
7, 9, 10, 5, 8, 4, 2,1 ]
* 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]
* 校验位总计公式:Y_P = mod( ∑(Ai×Wi),11 )
* i为身份证号码从右往左数的 二…1八 位;
Y_P为脚丫校验码所在校验码数组地方
*
*/

一、号码的协会公民身份号码是特色组合码,由10陆个人数字本体码和一人校验码组成。排列顺序从左至右依次为:伍位数字地址码,5人数字出生日期码,几人数字顺序码和一人数字校验码。

二.剖断是或不是微信

/**
 * 判断微信浏览器
 * @returns {Boolean}
 */
function isWeiXin() {
  var ua = window.navigator.userAgent.toLowerCase();
  if (ua.match(/MicroMessenger/i) == 'micromessenger') {
    return true;
  } else {
    return false;
  }
}
复制代码

出寿辰期总结办法:

var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];//
加权因子
var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];//
身份证验证位值.拾代表X
function IdCardValidate(idCard) {
idCard = trim(idCard.replace(/ /g, “”));
if (idCard.length == 15) {
return isValidityBrithBy15IdCard(idCard);
} else if (idCard.length == 18) {
var a_idCard = idCard.split(“”);// 得到身份证数组
if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){
return true;
}else {
return false;
}
} else {
return false;
}
}
/**
* 推断身份证号码为1五位时最后的验证位是或不是科学
* @param a_idCard 身份证号码数组
* @return
*/
function isTrueValidateCodeBy18IdCard(a_idCard) {
var sum = 0; // 表明加权求和变量
if (a_idCard[17].toLowerCase() == ‘x’) {
a_idCard[17] = 10;// 将最后位为x的验证码替换为十便于后续操作
}
for ( var i = 0; i < 17; i++) {
sum += Wi[i] * a_idCard[i];// 加权求和
}
valCodePosition = sum % 1一;// 获得验证码所职分
if (a_idCard[17] == ValideCode[valCodePosition]) {
return true;
} else {
return false;
}
}
/**
* 通过身份证判定是男是女
* @param idCard 15/拾拾1位身份证号码
* @return ‘female’-女、’male’-男
*/
function maleOrFemalByIdCard(idCard){
idCard = trim(idCard.replace(/ /g, “”));//
对身份证编号做拍卖。包罗字符间有空格。
if(idCard.length==15){
if(idCard.substring(14,15)%2==0){
return ‘female’;
}else{
return ‘male’;
}
}else if(idCard.length ==18){
if(idCard.substring(14,17)%2==0){
return ‘female’;
}else{
return ‘male’;
}
}else{
return null;
}
// 可对传播字符一向当作数组来处理
// if(idCard.length==15){
// alert(idCard[13]);
// if(idCard[13]%2==0){
PHP完毕中华人民共和国人民身份证号码有效性验证示例代码,验证身份证音信灵通。// return ‘female’;
// }else{
// return ‘male’;
// }
// }else if(idCard.length==18){
// alert(idCard[16]);
// if(idCard[16]%2==0){
// return ‘female’;
// }else{
// return ‘male’;
// }
// }else{
// return null;
// }
}
/**
* 验证二九人数身份证编号中的诞辰是不是是有效生日
* @param idCard 17个人书身份证字符串
* @return
*/
function isValidityBrithBy18IdCard(idCard18){
var year = idCard18.substring(6,10);
var month = idCard18.substring(10,12);
var day = idCard18.substring(12,14);
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
// 这里用getFullYear()获取年份,幸免千年虫难题
if(temp_date.getFullYear()!=parseFloat(year)
||temp_date.getMonth()!=parseFloat(month)-1
||temp_date.getDate()!=parseFloat(day)){
return false;
}else{
return true;
}
}
/**
* 验证1陆人数身份证编号中的寿辰是不是是有效寿辰
* @param idCard15 15位书身份证字符串
* @return
*/
function isValidityBrithBy15IdCard(idCard15){
var year = idCard15.substring(6,8);
var month = idCard15.substring(8,10);
var day = idCard15.substring(10,12);
var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day));
// 对于老身份证中的你年纪则不需考虑千年虫难题而使用getYear()方法
if(temp_date.getYear()!=parseFloat(year)
||temp_date.getMonth()!=parseFloat(month)-1
||temp_date.getDate()!=parseFloat(day)){
return false;
}else{
return true;
}
}
//去掉字符串头尾空格
function trim(str) {
return str.replace(/(^\s*)|(\s*$)/g, “”);
}

贰、地址码(前7人数)

三.到手时间格式的多少个比喻

function getTimeFormat(time) {
  var date = new Date(parseInt(time) * 1000);
  var month, day, hour, min;
  parseInt(date.getMonth()) + 1 < 10 ? month = '0' + (parseInt(date.getMonth()) + 1) : month = parseInt(date.getMonth()) + 1;
  date.getDate() < 10 ? day = '0' + date.getDate() : day = date.getDate();
  date.getHours() < 10 ? hour = '0' + date.getHours() : hour = date.getHours();
  date.getMinutes() < 10 ? min = '0' + date.getMinutes() : min = date.getMinutes();
  return [month, day].join('-') + '  ' + hour + ':' + min
}

function getTimeFormatYMD(time) {
  var date = new Date(parseInt(time) * 1000);
  var year, month, day;
  year = date.getFullYear();
  parseInt(date.getMonth()) + 1 < 10 ? month = '0' + (parseInt(date.getMonth()) + 1) : month = parseInt(date.getMonth()) + 1;
  date.getDate() < 10 ? day = '0' + date.getDate() : day = date.getDate();
  return [year, month, day].join('-')
}

function getTimeFormatAll(time) {
  var date = new Date(parseInt(time) * 1000);
  var year, month, day, hour, min, second;
  year = date.getFullYear();
  parseInt(date.getMonth()) + 1 < 10 ? month = '0' + (parseInt(date.getMonth()) + 1) : month = parseInt(date.getMonth()) + 1;
  date.getDate() < 10 ? day = '0' + date.getDate() : day = date.getDate();
  date.getHours() < 10 ? hour = '0' + date.getHours() : hour = date.getHours();
  date.getMinutes() < 10 ? min = '0' + date.getMinutes() : min = date.getMinutes();
  date.getSeconds() < 10 ? second = '0' + date.getSeconds() : second = date.getSeconds();

  return [year, month, day].join('-') + '  ' + hour + ':' + min + ':' + second
}
复制代码
  • 壹三人的身份证编码首先把出生年扩张为4个人,轻巧的就是增加2个1九或1八,那样就富含了装有1800-壹玖九陆年出生的人;
  • 两千年后诞生的必然都以21人的了并未有那些烦恼,至于1800年前出生的,那什么那时应该还没身份证号那一个东东。

立异版本二

表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的分明实践。

四.赢得字符串字节长度

/**
 * 获取字符串字节长度
 * @param {String}
 * @returns {Boolean}
 */
function checkLength(v) {
  var realLength = 0;
  var len = v.length;
  for (var i = 0; i < len; i++) {
    var charCode = v.charCodeAt(i);
    if (charCode >= 0 && charCode <= 128) realLength += 1;
    else realLength += 2;
  }
  return realLength;
}
复制代码

上边是正则说明式:

复制代码 代码如下:

3、出破壳日期码(第四人至10几个人)

5.指标克隆、深拷贝

/**
 * 对象克隆&深拷贝
 * @param obj
 * @returns {{}}
 */
function cloneObj(obj) {
  var newO = {};
  if (obj instanceof Array) {
    newO = [];
  }
  for (var key in obj) {
    var val = obj[key];
    newO[key] = typeof val === 'object' ? arguments.callee(val) : val;
  }
  return newO;
};
复制代码

克隆拷贝加强版

/**
 * 对象克隆&深拷贝
 * @param obj
 * @returns {{}}
 */
function clone(obj) {
  // Handle the 3 simple types, and null or undefined
  if (null == obj || "object" != typeof obj) return obj;
  // Handle Date
  if (obj instanceof Date) {
    var copy = new Date();
    copy.setTime(obj.getTime());
    return copy;
  }
  // Handle Array
  if (obj instanceof Array) {
    var copy = [];
    for (var i = 0,
    len = obj.length; i < len; ++i) {
      copy[i] = clone(obj[i]);
    }
    return copy;
  }
  // Handle Object
  if (obj instanceof Object) {
    var copy = {};
    for (var attr in obj) {
      if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);
    }
    return copy;
  }
  throw new Error("Unable to copy obj! Its type isn't supported.");
}
复制代码

测试用例:

var origin = {
  a: "text",
  b: null,
  c: undefined,
  e: {
    f: [1, 2]
  }
}
复制代码
  • 出生日期1800-209玖(18|1九|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])
  • 身份证正则表明式
    /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i
  • 一七位校验规则 八个人地点编码+八人出破壳日期+3人顺序号
  • 17人校验规则 八位地方编码+陆位出生日期+四人顺序号+1个人校验位

function checkIdcard(num)
{
num = num.toUpperCase();
//身份证号码为211人仍然17个人,壹多少人时全为数字,二十个人前二11位为数字,最终一个人是校验位,大概为数字或字符X。
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)))
{
//alert(‘输入的身份证号长度不对,或然号码不符合规定!\n一多个人号码应全为数字,1玖个人号码最后一位可以为数字或X。’);
return false;
}
//校验位依据ISO 706四:1玖83.MOD 11-二的分明生成,X能够感觉是数字10。
//下面分别分析出生日期和校验位
var len, re;
len = num.length;
if (len == 15)
{
re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
var arrSplit = num.match(re);

代表编码对象出生的年、月、日,按GB/T740捌的明确进行,年、月、日代码之间不用分隔符。

陆.组织结构代码证验证

表明规则:

团伙部门代码是每二个机关、社会公司、企职业单位在举国限制内唯1的、始终不改变的官方代码标志。最新使用的团体机构代码在199七年宣布试行,由5个人数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码组成。本体代码应用一体系(即分区段)顺序编码方法。校验码按下列公式总括:八C九 = 1壹 – MOD(∑Ci * Wi,1一)… (二) i =
1里头:MOD——表示求余函数;i——表示代码字符从左到右地点序号;Ci——表示第i职位上的代码字符的值,接纳附录A“代码字符集”所列字符;C九——表示校验码;Wi——表示第i岗位上的加权因子,其数值如下表:i
1 贰 三 4 5 陆 七 八 Wi 3 7 玖 10 伍 捌 四 二当MOD函数值为1(即C九 =
十)时,校验码用字母X表示。

表明方式:

checkOrgCodeValid: function(el) {
  var txtval = el.value;
  var values = txtval.split("-");
  var ws = [3, 7, 9, 10, 5, 8, 4, 2];
  var str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  var reg = /^([0-9A-Z]){8}$/;
  if (!reg.test(values[0])) {
    return false
  }
  var sum = 0;
  for (var i = 0; i < 8; i++) {
    sum += str.indexOf(values[0].charAt(i)) * ws[i];
  }
  var C9 = 11 - (sum % 11);
  var YC9 = values[1] + '';
  if (C9 == 11) {
    C9 = '0';
  } else if (C9 == 10) {
    C9 = 'X';
  } else {
    C9 = C9 + '';
  }
  return YC9 == C9;
}
复制代码

校验位规则:公式:∑(ai×Wi)(mod 11)……………………………………(壹)

//检查破壳日日期是或不是科学
var dtmBirth = new Date(’19’ + arrSplit[2] + ‘/’ + arrSplit[3] + ‘/’

肆、顺序码(第九5人至15位)

柒.身份证号验证

/**
 * 验证身份证号
 * @param el 号码输入input
 * @returns {boolean}
 */
function checkCardNo(el) {
  var txtval = el.value;
  var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
  return reg.test(txtval)
}
复制代码

公式(1)中:

  • arrSplit[4]);
    var bGoodDay;
    bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) &&
    ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) &&
    (dtmBirth.getDate() == Number(arrSplit[4]));
    if (!bGoodDay)
    {
    //alert(‘输入的身份证号里出出生之日期不对!’);
    return false;
    }
    else
    {
    //将一七位身份证转成1五位
    //校验位依照ISO 706四:1玖八3.MOD 1一-二的显著生成,X能够以为是数字10。
    var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4,
    2);
    var arrCh = new Array(‘1’, ‘0’, ‘X’, ‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’,
    ‘2’);
    var nTemp = 0, i;
    num = num.substr(0, 6) + ’19’ + num.substr(6, num.length – 6);
    for(i = 0; i < 17; i ++)
    {
    nTemp += num.substr(i, 1) * arrInt[i];
    }
    num += arrCh[nTemp % 11];
    return true;
    }
    }
    if (len == 18)
    {
    re = new
    RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
    var arrSplit = num.match(re);

表示在同等地址码所标记的区域限制内,对同龄、同月、同日出生的人编定的顺序号,
顺序码的奇数分配给男人,偶数分配给女人。

8.js正则为url添加http标识

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">  
  <title></title>
  <script>
        var html = 'http:/ / www.google.com ';
        html += '\rwww.google.com ';
        html += '\rcode.google.com ';
        html += '\rhttp: //code.google.com/hosting/search?q=label%3aPython';
        var regex = /(https?:\/\/)?(\w+\.?)+(\/[a-zA-Z0-9\?%=_\-\+\/]+)?/gi;
        alert('before replace:');
        alert(html);
        html = html.replace(regex,
            function(match, capture) {
                if (capture) {
                    return match
                } else {
                    return 'http://' + match;
                }
            });
        alert('after replace:');
        alert(html); 
    </script>
</head>
<body>  
</body>
</html>

复制代码
  • i—-代表号码字符从由至左包罗校验码在内的岗位序号;
  • ai—-代表第i职位上的号码字符值;
  • Wi—-示第i职分上的加权因子,其数值依赖公式Wi=二^(n-一)(mod
    11)计算得出。
  • i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
  • Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1

//检查出生之日日期是还是不是科学
var dtmBirth = new Date(arrSplit[2] + “/” + arrSplit[3] + “/” +
arrSplit[4]);
var bGoodDay;
bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) &&
((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) &&
(dtmBirth.getDate() == Number(arrSplit[4]));
if (!bGoodDay)
{
//alert(dtmBirth.getYear());
//alert(arrSplit[2]);
//alert(‘输入的身份证号里出寿辰期不对!’);
return false;
}
else
{
//核准1伍位身份证的校验码是或不是正确。
//校验位依照ISO 7064:19八三.MOD 11-二的显明生成,X能够认为是数字十。
var valnum;
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4,
2);
var arrCh = new Array(‘1’, ‘0’, ‘X’, ‘9’, ‘8’, ‘7’, ‘6’, ‘5’, ‘4’, ‘3’,
‘2’);
var nTemp = 0, i;
for(i = 0; i < 17; i ++)
{
nTemp += num.substr(i, 1) * arrInt[i];
}
valnum = arrCh[nTemp % 11];
if (valnum != num.substr(17, 1))
{
//alert(’21人身份证的校验码不得法!应该为:’ + valnum);
return false;
}
return true;
}
4858美高梅 ,}
return false;
}

5、校验码(第107人数)

玖.UXC90L管用校验方法

/**
 * URL有效性校验
 * @param str_url
 * @returns {boolean}
 */
function isURL(str_url) { 
  // 验证url
  var strRegex = "^((https|http|ftp|rtsp|mms)?://)" + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //           
  ftp的user@ + "(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP形式的URL- 199.194.52.184
  + "|" // 允许IP和DOMAIN(域名)
  + "([0-9a-z_!~*'()-]+\.)*" // 域名- www.
  + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // 二级域名
  + "[a-z]{2,6})" // first level domain- .com or .museum
  + "(:[0-9]{1,4})?" // 端口- :80
  + "((/?)|" // a slash isn't required if there is no file name
  + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$";
  var re = new RegExp(strRegex);
  return re.test(str_url);
}
// 建议的正则
functionisURL(str) {
  return !! str.match(/(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g);
}
复制代码

您只怕感兴趣的稿子:

  • Javascript使用正则验证身份证号(轻松)
  • js验证真实姓名与身份证号,手提式有线电话机号的简易实例
  • js验证真实姓名与身份证号是还是不是同盟
  • JavaScript正则表明式验证身份证编号是或不是合法(三种方法)
  • 怎么着用javascript正则表明式验证身份证号码是还是不是合法
  • javascript验证身份证号
  • js实现二代身份证号码证实详解
  • js完毕身份证编号证实的总结实例
  • js
    第二代身份证编号的印证机制代码
  • javascript验证东方之珠身份证的格式或真实

(1)二十位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, … , 1陆,先对前拾伍人数字的权求和

10.自定义jsonp方法

/**
 * 自定义封装jsonp方法
 * @param options
 */
jsonp = function(options) {
  options = options || {};
  if (!options.url || !options.callback) {
    throw new Error("参数不合法");
  }
  //创建 script 标签并加入到页面中
  var callbackName = ('jsonp_' + Math.random()).replace(".", "");
  var oHead = document.getElementsByTagName('head')[0];
  options.data[options.callback] = callbackName;
  var params = formatParams(options.data);
  var oS = document.createElement('script');
  oHead.appendChild(oS);
  //创建jsonp回调函数
  window[callbackName] = function(json) {
    oHead.removeChild(oS);
    clearTimeout(oS.timer);
    window[callbackName] = null;
    options.success && options.success(json);
  };
  //发送请求
  oS.src = options.url + '?' + params;
  //超时处理
  if (options.time) {
    oS.timer = setTimeout(function() {
      window[callbackName] = null;
      oHead.removeChild(oS);
      options.fail && options.fail({
        message: "超时"
      });
    },
    time);
  }
};
/**
 * 格式化参数
 * @param data
 * @returns {string}
 */
formatParams = function(data) {
  var arr = [];
  for (var name in data) {
    arr.push(encodeURIComponent(name) + '=' + encodeURIComponent(data[name]));
  }
  return arr.join('&');
}
复制代码
  /*
  //身份证号合法性验证 
  //支持15位和18位身份证号
  //支持地址编码、出生日期、校验位验证
        function IdentityCodeValid(code) { 
            var city={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:"国外 "};
            var tip = "";
            var pass= true;

            if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(code)){
                tip = "身份证号格式错误";
                pass = false;
            }

           else if(!city[code.substr(0,2)]){
                tip = "地址编码错误";
                pass = false;
            }
            else{
                //18位身份证需要验证最后一位校验位
                if(code.length == 18){
                    code = code.split('');
                    //∑(ai×Wi)(mod 11)
                    //加权因子
                    var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
                    //校验位
                    var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
                    var sum = 0;
                    var ai = 0;
                    var wi = 0;
                    for (var i = 0; i < 17; i++)
                    {
                        ai = code[i];
                        wi = factor[i];
                        sum += ai * wi;
                    }
                    var last = parity[sum % 11];
                    if(parity[sum % 11] != code[17]){
                        tip = "校验位错误";
                        pass =false;
                    }
                }
            }
            if(!pass) alert(tip);
            return pass;
        }
        var c = '130981199312253466';
        var res= IdentityCodeValid(c);
  alert(res);       

Ai:表示第i职分上的身份证编号数字值

11.cookie操作

//写cookies
setCookie = function(name, value, time) {
  var strsec = getsec(time);
  var exp = new Date();
  exp.setTime(exp.getTime() + strsec * 1);
  document.cookie = name + "=" + escape(value) + ";expires=" + exp.toGMTString();
}
//cookie操作辅助函数
getsec = function(str) {
  var str1 = str.substring(1, str.length) * 1;
  var str2 = str.substring(0, 1);
  if (str2 == "s") {
    return str1 * 1000;
  } else if (str2 == "h") {
    return str1 * 60 * 60 * 1000;
  } else if (str2 == "d") {
    return str1 * 24 * 60 * 60 * 1000;
  }
}
//读取cookies
getCookie = function(name) {
  var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
  if (arr = document.cookie.match(reg)) return (arr[2]);
  else return null;
}

//删除cookies
delCookie = function(name) {
  var exp = new Date();
  exp.setTime(exp.getTime() - 1);
  var cval = getCookie(name);
  if (cval != null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
}
复制代码

Wi:表示第i职务上的加权因子 Wi: 七 九 10 伍 八 四 二 1 陆 叁 7 九 10 5 8 四 2

12.生成自由字符串 (可钦定长度)

/**
 * 生成随机字符串(可指定长度)
 * @param len
 * @returns {string}
 */
randomString = function(len) {
  len = len || 8;
  var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
  /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
  var maxPos = $chars.length;
  var pwd = '';
  for (var i = 0; i < len; i++) {
    pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
  }
  return pwd;
}
复制代码

(2)计算模 Y = mod(S, 11)

一三.浏览器判别

function parseUA() {
  var u = navigator.userAgent;
  var u2 = navigator.userAgent.toLowerCase();
  return { //移动终端浏览器版本信息
    trident: u.indexOf('Trident') > -1,
    //IE内核
    presto: u.indexOf('Presto') > -1,
    //opera内核
    webKit: u.indexOf('AppleWebKit') > -1,
    //苹果、谷歌内核
    gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,
    //火狐内核
    mobile: !!u.match(/AppleWebKit.*Mobile.*/),
    //是否为移动终端
    ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
    //ios终端
    android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1,
    //android终端或uc浏览器
    iPhone: u.indexOf('iPhone') > -1,
    //是否为iPhone或者QQHD浏览器
    iPad: u.indexOf('iPad') > -1,
    //是否iPad
    webApp: u.indexOf('Safari') == -1,
    //是否web应该程序,没有头部与底部
    iosv: u.substr(u.indexOf('iPhone OS') + 9, 3),
    weixin: u2.match(/MicroMessenger/i) == "micromessenger",
    ali: u.indexOf('AliApp') > -1,
  };
}
var ua = parseUA();
if (!ua.mobile) {
  location.href = './pc.html';
}

复制代码

(三)通过模得到相应的校验码 Y: 0 1 2 三 肆 5 六 7 八 九 十 校验码: 壹 0 X 玖 8七 6 5 四 3 2

1肆.Rem活动端适配

var rem = {
  baseRem: 40,
  // 基准字号,按照iphone6应该为20,此处扩大2倍,便于计算
  baseWidth: 750,
  // 基准尺寸宽,此处是按照ihpone6的尺寸
  rootEle: document.getElementsByTagName("html")[0],
  initHandle: function() {
    this.setRemHandle();
    this.resizeHandle();
  },
  setRemHandle: function() {
    var clientWidth = document.documentElement.clientWidth || document.body.clientWidth;
    this.rootEle.style.fontSize = clientWidth * this.baseRem / this.baseWidth + "px";
  },
  resizeHandle: function() {
    var that = this;
    window.addEventListener("resize",
    function() {
      setTimeout(function() {
        that.setRemHandle();
      },
      300);
    });
  }
};
rem.initHandle();
复制代码

IDValidator.php

15.获取url后参数

function GetRequest() {
  var url = location.search; //获取url中"?"符后的字串
  var theRequest = new Object();
  if (url.indexOf("?") != -1) {
    var str = url.substr(1);
    strs = str.split("&");
    for (var i = 0; i < strs.length; i++) {
      theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1]);
    }
  }
  return theRequest;
}
复制代码
<?php
namespace com\jdk5\blog\IDValidator;

class IDValidator {
 private static $GB2260;
 private static $instance;
 private static $cache = array();
 private static $util;
 function __construct() {
 if (!class_exists("com\jdk5\blog\IDValidator\GB2260")){
 include 'GB2260.php';
 }
 if (!class_exists("com\jdk5\blog\IDValidator\util")){
 include 'util.php';
 }
 self::$GB2260 = GB2260::getGB2260 ();
 self::$util = util::getInstance();
 }
 public static function getInstance() {
 if (is_null ( self::$instance )) {
 self::$instance = new IDValidator ();
 }
 return self::$instance;
 }
 function isValid($id) {
 $code = self::$util->checkArg ( $id );
 if ($code === false) {
 return false;
 }
 // 查询cache
 if (isset ( self::$cache [ $id ] ) && self::$cache [$id] ['valid'] !== false) {
 return self::$cache [$id] ['valid'];
 } else {
 if (! isset ( self::$cache [ $id ] )) {
 self::$cache [$id] = array ();
 }
 }

 $addr = substr ( $code ['body'], 0, 6 );
 $birth = $code ['type'] === 18 ? substr ( $code ['body'], 6, 8 ) :
 substr ( $code ['body'], 6, 6 );
 $order = substr ( $code ['body'], - 3 );

 if (! (self::$util->checkAddr ( $addr ) && self::$util->checkBirth ( $birth ) &&
 self::$util->checkOrder ( $order ))) {
 self::$cache [$id] ['valid'] = false;
 return false;
 }

 // 15位不含校验码,到此已结束
 if ($code ['type'] === 15) {
 self::$cache [$id] ['valid'] = true;
 return true;
 }

 /* 校验位部分 */

 // 位置加权
 $posWeight = array ();
 for($i = 18; $i > 1; $i --) {
 $wei = self::$util->weight ( $i );
 $posWeight [$i] = $wei;
 }

 // 累加body部分与位置加权的积
 $bodySum = 0;
 $bodyArr = str_split( $code ['body'] );
 for($j = 0; $j < count ( $bodyArr ); $j ++) {
 $bodySum += (intval ( $bodyArr [$j], 10 ) * $posWeight [18 - $j]);
 }

 // 得出校验码
 $checkBit = 12 - ($bodySum % 11);
 if ($checkBit == 10) {
 $checkBit = 'X';
 } else if ($checkBit > 10) {
 $checkBit = $checkBit % 11;
 }
 // 检查校验码
 if ($checkBit != $code ['checkBit']) {
 self::$cache [$id] ['valid'] = false;
 return false;
 } else {
 self::$cache [$id] ['valid'] = true;
 return true;
 }
 }
 // 分析详细信息
 function getInfo ($id) {
 // 号码必须有效
 if ($this->isValid($id) === false) {
 return false;
 }
 // TODO 复用此部分
 $code = self::$util->checkArg($id);

 // 查询cache
 // 到此时通过isValid已经有了cache记录
 if (isset(self::$cache[$id]) && isset(self::$cache[$id]['info'])) {
 return self::$cache[$id]['info'];
 }

 $addr = substr($code['body'], 0, 6);
 $birth = ($code['type'] === 18 ? substr($code['body'], 6, 8) :
 substr($code['body'], 6, 6));
 $order = substr($code['body'], -3);

 $info = array();
 $info['addrCode'] = $addr;
 if (self::$GB2260 !== null) {
 $info['addr'] = self::$util->getAddrInfo($addr);
 }
 $info ['birth'] = ($code ['type'] === 18 ? (substr ( $birth, 0, 4 ) . '-' . substr ( $birth, 4, 2 ) . '-' . substr ( $birth, - 2 )) : ('19' . substr ( $birth, 0, 2 ) . '-' . substr ( $birth, 2, 2 ) . '-' . substr ( $birth, - 2 )));
 $info['sex'] = ($order % 2 === 0 ? 0 : 1);
 $info['length'] = $code['type'];
 if ($code['type'] === 18) {
 $info['checkBit'] = $code['checkBit'];
 }

 // 记录cache
 self::$cache[$id]['info'] = $info;

 return $info;
 }

 // 仿造一个号
 function makeID ($isFifteen=false) {
 // 地址码
 $addr = null;
 if (self::$GB2260 !== null) {
 $loopCnt = 0;
 while ($addr === null) {
 // 防止死循环
 if ($loopCnt > 50) {
  $addr = 110101;
  break;
 }
 $prov = self::$util->str_pad(self::$util->rand(66), 2, '0');
 $city = self::$util->str_pad(self::$util->rand(20), 2, '0');
 $area = self::$util->str_pad(self::$util->rand(20), 2, '0');
 $addrTest = $prov . $city . $area;
 if (isset(self::$GB2260[$addrTest])) {
  $addr = $addrTest;
  break;
 }
 $loopCnt ++;
 }
 } else {
 $addr = 110101;
 }

 // 出生年
 $yr = self::$util->str_pad(self::$util->rand(99, 50), 2, '0');
 $mo = self::$util->str_pad(self::$util->rand(12, 1), 2, '0');
 $da = self::$util->str_pad(self::$util->rand(28, 1), 2, '0');
 if ($isFifteen) {
 return $addr . $yr . $mo . $da
 . self::$util->str_pad(self::$util->rand(999, 1), 3, '1');
 }

 $yr = '19' . $yr;
 $body = $addr . $yr . $mo . $da . self::$util->str_pad(self::$util->rand(999, 1), 3, '1');

 // 位置加权
 $posWeight = array();
 for ($i = 18; $i > 1; $i--) {
 $wei = self::$util->weight($i);
 $posWeight[$i] = $wei;
 }

 // 累加body部分与位置加权的积
 $bodySum = 0;
 $bodyArr = str_split($body);
 for ($j = 0; $j < count($bodyArr); $j++) {
 $bodySum += (intval($bodyArr[$j], 10) * $posWeight[18 - $j]);
 }

 // 得出校验码
 $checkBit = 12 - ($bodySum % 11);
 if ($checkBit == 10) {
 $checkBit = 'X';
 } else if ($checkBit > 10) {
 $checkBit = $checkBit % 11;
 }
 return ($body . $checkBit);
 }
}

1六.动态加载JS

function loadScript(url, callback) {
  var script = document.createElement("script");
  script.type = "text/";
  if (typeof(callback) != "undefined") {
    if (script.readyState) {
      script.onreadystatechange = function() {
        if (script.readyState == "loaded" || script.readyState == "complete") {
          script.onreadystatechange = null;
          callback();
        }
      };
    } else {
      script.onload = function() {
        callback();
      };
    }
  }
  script.src = url;
  document.body.appendChild(script);
}
复制代码

调用

1柒.生成自由颜色值

function getRandomColor () {
  const rgb = []
  for (let i = 0 ; i < 3; ++i){
    let color = Math.floor(Math.random() * 256).toString(16)
    color = color.length == 1 ? '0' + color : color
    rgb.push(color)
  }
  return '#' + rgb.join('')
}
<?php
header("Content-type: text/html; charset=utf-8");

include 'IDValidator.php';
$v = com\jdk5\blog\IDValidator\IDValidator::getInstance();

//生成一个18位身份证号
$id = $v->makeID();
//获取身份证信息
$info = $v->getInfo($id);
var_dump($info);
//生成一个15位身份证号
$id = $v->makeID(true);
$info = $v->getInfo($id);
var_dump($info);

//验证身份证号是否正确
var_dump($v->isValid("123456789012345678"));

上述便是本文的全体内容,希望对我们的上学抱有援救,也期待我们多多援救脚本之家。

你或者感兴趣的稿子:

  • php验证身份证编号不错的函数
  • PHP 身份证号验证函数
  • php正则判定是不是为官方身份证号的秘技
  • php依据身份证编号计算年龄的实例代码
  • php从身份证获取性别和出生年月
  • 应用php完毕从身份证中领取破壳日
  • php提取身份证号码中的生日日期以及表达是还是不是为中年人的函数
  • 使用php从身份证号中得到1雨后春笋线索(星座、生肖、破壳日等)
  • PHP用身份证号获取星座和生肖的方法
  • PHP身份证校验码总结方法
  • PHP实现可准确验证身份证号码的工具类示例

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有