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身份认证基础 在开始今天的博客 ...
随机推荐
- [No00000A]计算机的存储单位
位 bit (比特)(Binary Digits):存放一位二进制数,即 0 或 1,最小的存储单位. 字节 byte:8个二进制[bit (比特)(Binary Digits)]位为一个字节(B), ...
- iOS Block详细介绍(block实现)
Block的实现 数据结构定义 block的数据结构定义如下图 对应的结构体定义如下: struct Block_descriptor { unsigned long int reserved; un ...
- 開博客了, 因為搞Delphi 開發的關於Delphi學習
開博客了, 因為搞Delphi 開發的關於Delphi學習,之前都是用本地TXT文件保存,發現在本地電腦保存非常不方面,而且只能在一台電腦上保存,不容易查看和修改內容.便於以後的記錄只用,以及經驗交流 ...
- php加载xml编码错误,“Error: Input is not proper UTF-8, indicate encoding! ”
最近在给php中解析xml的时候,抛出一个错误: "Warning: DOMDocument::load(): Input is not proper UTF-8, indicate enc ...
- HDU 1022 Train Problem I
A - Train Problem I Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- ASP.NET MVC的Web Api的实练
学习ASP.NET MVC一年多来,现在该学学Web Api了.API与ASP.NET MVC的Controller差不多.前者只是返回数据序列化和发送给客户端: 后者返回View或Render Vi ...
- Ros与Vrep平台搭建
参考资料: ROS安装: ros 是一个framework 和Android有点像,内核用的linux.Ros提供了一种供机器人开发者迅速上手的一个平台, 可以快速搭建自己的应用,利用ros下面自带的 ...
- TinyFrame升级之八:实现简易插件化开发
本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...
- Android -- View移动的六种方法
layout() 如果你将滑动后的目标位置的坐标传递给layout(),这样子就会把view的位置给重新布置了一下,在视觉上就是view的一个滑动的效果. public class DragView ...
- InputStream复用,mark和reset
markSupported InputStream是否支持mark,默认不支持. public boolean markSupported() { return false; } InputStrea ...