js 身份验证
var
idCardNoUtil = {
provinceAndCitys: {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:
"国外"
},
powers: [
"7"
,
"9"
,
"10"
,
"5"
,
"8"
,
"4"
,
"2"
,
"1"
,
"6"
,
"3"
,
"7"
,
"9"
,
"10"
,
"5"
,
"8"
,
"4"
,
"2"
],parityBit: [
"1"
,
"0"
,
"X"
,
"9"
,
"8"
,
"7"
,
"6"
,
"5"
,
"4"
,
"3"
,
"2"
],genders: {male:
"男"
,female:
"女"
},
checkAddressCode:
function
(addressCode) {
var
check = /^[1-9]\d{5}$/.test(addressCode);
if
(!check)
return
false
;
if
(idCardNoUtil.provinceAndCitys[parseInt(addressCode.substring(0,2))]){
return
true
;
}
else
{
return
false
;
}
},
checkBirthDayCode:
function
(birDayCode){
var
check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(birDayCode);
if
(!check)
return
false
;
var
yyyy = parseInt(birDayCode.substring(0,4),10);
var
mm = parseInt(birDayCode.substring(4,6),10);
var
dd = parseInt(birDayCode.substring(6),10);
var
xdata =
new
Date(yyyy,mm-1,dd);
if
(xdata >
new
Date()){
return
false
;
//生日不能大于当前日期
}
else
if
( ( xdata.getFullYear() == yyyy ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == dd ) ){
return
true
;
}
else
{
return
false
;
}
},
getParityBit:
function
(idCardNo){
var
id17 = idCardNo.substring(0,17);
var
power = 0;
for
(
var
i=0;i<17;i++){
power += parseInt(id17.charAt(i),10) * parseInt(idCardNoUtil.powers[i]);
}
var
mod = power % 11;
return
idCardNoUtil.parityBit[mod];
},
checkParityBit:
function
(idCardNo){
var
parityBit = idCardNo.charAt(17).toUpperCase();
if
(idCardNoUtil.getParityBit(idCardNo) == parityBit){
return
true
;
}
else
{
return
false
;
}
},
checkIdCardNo:
function
(idCardNo){
//15位和18位身份证号码的基本校验
var
check = /^[0-9]{15}|([0-9]{17}([0-9]|x|X))$/.test(idCardNo);
if
(!check)
return
false
;
//判断长度为15位或18位
if
(idCardNo.length==15){
return
idCardNoUtil.check15IdCardNo(idCardNo);
}
else
if
(idCardNo.length==18){
return
idCardNoUtil.check18IdCardNo(idCardNo);
}
else
{
return
false
;
}
},
//校验15位的身份证号码
check15IdCardNo:
function
(idCardNo){
//15位身份证号码的基本校验
//在JavaScript中,正则表达式只能使用"/"开头和结束,不能使用双引号
var
check = /^[1-9][0-9]{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))[0-9]{3}$/.test(idCardNo);
if
(!check)
return
false
;
//校验地址码
var
addressCode = idCardNo.substring(0,6);
check = idCardNoUtil.checkAddressCode(addressCode);
if
(!check)
return
false
;
var
birDayCode =
'19'
+ idCardNo.substring(6,12);
//校验日期码
return
idCardNoUtil.checkBirthDayCode(birDayCode);
},
//校验18位的身份证号码
check18IdCardNo:
function
(idCardNo){
//18位身份证号码的基本格式校验
//在JavaScript中,正则表达式只能使用"/"开头和结束,不能使用双引号
var
objReg = /^[1-9][0-9]{5}[1-9][0-9]{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))[0-9]{3}([0-9]|x|X)$/i;
var
check = objReg.test(idCardNo);
if
(!check)
return
false
;
//校验地址码
var
addressCode = idCardNo.substring(0,6);
check = idCardNoUtil.checkAddressCode(addressCode);
if
(!check)
return
false
;
//校验日期码
var
birDayCode = idCardNo.substring(6,14);
check = idCardNoUtil.checkBirthDayCode(birDayCode);
if
(!check)
return
false
;
//验证校检码
return
idCardNoUtil.checkParityBit(idCardNo);
},
formateDateCN:
function
(day){
var
yyyy =day.substring(0,4);
var
mm = day.substring(4,6);
var
dd = day.substring(6);
return
yyyy +
'-'
+ mm +
'-'
+ dd;
},
//获取信息
getIdCardInfo:
function
(idCardNo){
var
idCardInfo = {
gender:
""
,
//性别
birthday:
""
// 出生日期(yyyy-mm-dd)
};
if
(idCardNo.length==15){
var
aday =
'19'
+ idCardNo.substring(6,12);
idCardInfo.birthday=idCardNoUtil.formateDateCN(aday);
if
(parseInt(idCardNo.charAt(14))%2==0){
idCardInfo.gender=idCardNoUtil.genders.female;
}
else
{
idCardInfo.gender=idCardNoUtil.genders.male;
}
}
else
if
(idCardNo.length==18){
var
aday = idCardNo.substring(6,14);
idCardInfo.birthday=idCardNoUtil.formateDateCN(aday);
if
(parseInt(idCardNo.charAt(16))%2==0){
idCardInfo.gender=idCardNoUtil.genders.female;
}
else
{
idCardInfo.gender=idCardNoUtil.genders.male;
}
}
return
idCardInfo;
},
getId15:
function
(idCardNo){
if
(idCardNo.length==15){
return
idCardNo;
}
else
if
(idCardNo.length==18){
return
idCardNo.substring(0,6) + idCardNo.substring(8,17);
}
else
{
return
null
;
}
},
getId18:
function
(idCardNo){
if
(idCardNo.length==15){
var
id17 = idCardNo.substring(0,6) +
'19'
+ idCardNo.substring(6);
var
parityBit = idCardNoUtil.getParityBit(id17);
return
id17 + parityBit;
}
else
if
(idCardNo.length==18){
return
idCardNo;
}
else
{
return
null
;
}
}
};
//验证护照是否正确
function
checknumber(number){
var
str=number;
//在JavaScript中,正则表达式只能使用"/"开头和结束,不能使用双引号
var
Expression=/(P\d{7})|(G\d{8})/;
var
objExp=
new
RegExp(Expression);
if
(objExp.test(str)==
true
){
return
true
;
}
else
{
return
false
;
}
};
js 身份验证的更多相关文章
- 基于 Token 的身份验证:JSON Web Token(附:Node.js 项目)
最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等,比起传统的身份验证方法,Token 扩展性更强, ...
- (八)play之yabe项目【身份验证】
(八)play之yabe项目[身份验证] 博客分类: 框架@play framework 添加身份验证 play提供了一个模块-Secure(安全模块),用来做身份验证 允许Secure模块 修改 ...
- 通过批处理 安装 mongodb和设置身份验证
1.首先需要 mongodb.msi安装包 2.mongodb的配置文件mongod.cfg 内容如下: systemLog: destination: file path: "D:/mon ...
- MVC启动windows身份验证时初次访问特别慢
最近做了一个关于MVC的项目,刚开始往服务器上面部署时,没有开启windows身份验证,等开发基本收尾时候,将验证开启时,第一次打开的时候需要将近15s的访问时间,别说用户受不了,自己都受不了了. 对 ...
- ASP.NET Core身份验证服务框架IdentityServer4-整体介绍
一.整体情况 现代应用程序看起来更像这个: 最常见的相互作用: 浏览器与Web应用程序的通信 Browser -> Web App Web应用程序与Web API通信 基于浏览器的应用程序与We ...
- c# WebApi之身份验证:Basic基础认证
为什么需要身份认证 身份认证是为了提高接口访问的安全性,如果没有身份验证,那么任何匿名用户只要知道服务器的url,就可以随意访问服务器,从而访问或者操作数据库,这会是很恐怖的事. 什么是Basic基础 ...
- Ruby学习笔记7: 添加身份验证(adding Authentication)
我们已经完成了Category & Product页面内容的增删改查,再加入一个身份验证即可成为一个较完整的Rails App了.本文就来完成这个任务. We now need to give ...
- .Net MVC 身份验证
.Net身份验证主要是分为三种 Windows | Forms | Passport ,其中Froms在项目中用的最多. Windows 身份验证 Forms 验证 Passport 验证 1.Win ...
- ASP.NET Form身份验证方式详解
注:不会涉及ASP.NET的登录系列控件以及membership的相关话题, 我只想用比较原始的方式来说明在ASP.NET中是如何实现身份认证的过程. ASP.NET身份认证基础 在开始今天的博客 ...
随机推荐
- 转:linux下安装或升级GCC4.8,以支持C++11标准
转:http://www.cnblogs.com/lizhenghn/p/3550996.html C++11标准在2011年8月份获得一致通过,这是自1998年后C++语言第一次大修订,对C++语言 ...
- 实现PD控制
尝试为场加入PD控制 在之前的模拟中,需要最小化一个能量函数H. 这样做的原因是,由理想约束的特性(约束反力垂直于虚位移),对于不含体积蒙皮的情况,可以推出 对于表面点,有 J^T * Σfs = 0 ...
- 逗号分隔的字符串转换为行数据(collection)
逗号分隔的字符串转换为行数据(collection) CREATE OR REPLACE FUNCTION "GET_STR_TAB" (v_str in varchar2) re ...
- git push上传代码到gitlab上,报错401或403
之前部署的gitlab代码托管平台,采用ssh方式连接gitlab,在客户机上产生公钥上传到gitlab的SSH-Keys里,则git clone下载和git push上传都没问题,这种方式很安全. ...
- django自带wsgi server vs 部署uwsgi+nginx后的性能对比
一.下面先交代一下测试云主机 cpu: root@alexknight:/tmp/webbench-1.5# cat /proc/cpuinfo |grep model model : model n ...
- Java语言中的volatile变量
Java中的两种内置同步机制: synchronized 和 volatile 变量, volatile修饰的变量, 在使用时会强制检查最新值. 有synchronized的值可见性, 但是没有其操作 ...
- 数据库 SQL语法一
建立表语句 CREATE TABLE TABLENAME(COL_NAME1 TYPE,COL_NAME2 TYPE,......); 常用TYPE说明 INT 正数 CHAR(LENGTH) 定长字 ...
- 前端见微知著JavaScript基础篇:你所不知道的apply, call 和 bind
在我的职业生涯中,很早就已经开始使用JavaScript进行项目开发了.但是一直都是把重心放在了后端开发方面,前端方面鲜有涉及.所以造成的一个现象就是:目前的前端知识水平,应付一般的项目已然是足够的, ...
- 关于用mybatis调用存储过程时的入参和出参的传递方法
一.问题描述 a) 目前调用读的存储过程的接口定义一般是:void ReadDatalogs(Map<String,Object> map);,入参和出参都在这个map里 ...
- href的那些事
很多网站中都会使用<a>标签和 href属性来做链接,尤其在分页显示中用得最普遍.然而很多人对href的使用却并不十分了解. 1.href="#" 这个在网页中上滚回顶 ...