键盘用户界面模块使用说明
1. 键盘用户界面模块介绍
健盘用户界面模块是一个处理WEB编程中常用的针对健盘用户界面交互功能的通用javascript模块,主要功能有输入强制性验证,回车切换输入域,快捷键执行功能按钮或切换输入域,输入域活动提示,友好提示信息显示等主要功能。
2. 模块所处位置与调用说明
该模块处在:defaultroot/platform/js/UiKey.js
调用方式为:
<script src="/defaultroot/platform/js/UiKey.js "></script>
该名必须必须放在</body>标签的前一句
提交前验证:
function SubmitForm(form)
{
if(!checkFormInput(form)) return false;
form.submit();
}
3. 功能介绍与实现说明
l 输入强制性验证
比如有如下输入框,该输入框只能输入数字字符,用如下方式声明
<input type="text" name="credNumber" minlength="5" maxlength="16" charset="Number" datatype="Cardnumber" nullable="true" size="40" tabindex="9" value="">
charset=”Number”属性就能定义该输入框所能输入的字符类型
注意:其实在实现上,该例子模块会自动调用isNumber(handle,keyCode)来进行验证,系统默认提供了几个验证函数,当需要其它验证方式时,可以自己定义相关的验证函数来进行验证
比如,我有一个输入框,需要输入IP地址,则可以如下声明:
Number:<input type="text" name="credNumber" minlength="5" maxlength="16" charset="Ip" datatype="Cardnumber" nullable="true" size="40" tabindex="9" value="">
然后实现isIP(handle,keyCode)函数即可纳入统一的验证框架之下
本验证只实现输入过程中的验证,至于输入完后格式正确性的验证由如下实现:
<input type="text" name="credNumber" minlength="5" maxlength="16" charset="Number" datatype="Cardnumber" nullable="true" size="40" tabindex="9" value="">
datetype=”Cardnumber”属性就能定义该输入框所需要输入的数据类型
注意:其实在实现上,该例子模块会自动调用isCardnumber(handle)来进行验证,系统默认提供了几个验证函数,当需要其它验证方式时,可以自己定义相关的验证函数来进行验证
比如,我有一个输入框,需要输入移动电话地址,则可以如下声明:
Number:<input type="text" name="Phone" minlength="5" maxlength="16" charset="Number" datatype="Mobile" nullable="true" size="40" tabindex="9" value="">
然后实现isMobile(handle)函数(其实已经实现)即可纳入统一的验证框架之下
l 回车切换输入域
一般情况下,用户在有多输入域的时候都希望在敲下回车后切换到下一输入域,本模块以统一的方式实现了,并且能够识别普通输入域与按钮(包括图片按钮,注意,只要图片有onclick事件,则认为是按钮),在按钮上敲回车将会执行该按钮功能。
要实现该功能,只要定义输入的域tabindex属性即可,如下所示
Number:<input type="text" id="test1" charset="Number" tabindex=1>
<p>
Visible:<input type="text" id="test5" charset="Visible" tabindex=2>
<p>
<IMG SRC="D:/eclipse/workspace/PFE/defaultroot/style/tempstylefolder/images/3_ico_3.gif" border="5" WIDTH="48" HEIGHT="40" BORDER="0" charset="ddd" accessKey="Z" onclick="alert('image1 click');" tabindex=3 >
<INPUT TYPE="button" accessKey="5" value="(1)" onclick="alert('button click');" tabindex=4>
如果一路按回车键,则焦点会按tabindex的顺序往下跳,在图片按钮与普通按钮上则不回跳,直接执行onclcik事件
l 快捷键功能
本模块能够定义各页面元素的快捷键,包括图片按钮,普通按钮,各输入域,其定义方式为设置对象的accessKey属性,如下所示
Number:<input type="text" id="test1" charset="Number" tabindex=1 accessKey=”1”>
<p>
Visible:<input type="text" id="test5" charset="Visible" tabindex=2 accessKey=”2”>
<p>
<IMG SRC="D:/eclipse/workspace/PFE/defaultroot/style/tempstylefolder/images/3_ico_3.gif" border="5" WIDTH="48" HEIGHT="40" BORDER="0" charset="ddd" accessKey="Z" onclick="alert('image1 click');" tabindex=3 >
<INPUT TYPE="button" accessKey="5" value="(1)" onclick="alert('button click');" tabindex=4>
当按下ALT+1或者ALT+2后,第一个输入框和第二个输入框会得到焦点
当按下ALT+z或者ALT+5时,图片的onclick事件与按钮的onclick事件会执行
本模块模认定义home键将焦点落在第一个输入域上,end键将焦点落在最后一个输入区域上
l 输入域活动提示
本模块会自动完成,当某一个输入域获得焦点时,会加重显示该输入域,当文本输入域
获得焦点时会自动选择其所有文本
l 友好提示信息
信息提示一直采用alert的方式,这种方式不友好,用户要点击确定后才能继续进行下去,本模块提供汽球型友好提示方式,调用方式如下:
showTip(handle,”必须输入用户名!”);
handle为输入框的句柄
注意,为了显示对应的汽泡提示,还有几个对应的小图片,可以自己帮,也可以找我要!
如果要用在struts 标签库中也是可以的,不过要改一下标签库,如果有需要的也可以直接联系我!
QQ:6045306
EMAIL:huijunzi@21cn.com
//以下为代码
/*
说明:文本框输入格式验证与气球提示实现,图片快捷键功能实现
版权:Copyright (C) 2004 Cyril
作者:Cyril
调用方式:
<script src="UIKey.js"></script>
必须放在</body>标签的前一句
*/
//初始化调用
//先提示画层
drawTipDiv();
//输出样式表
drawStyle();
//装载侦听器
addListener();
//容错处理
function killErrors() {
return true;
}
//window.onerror = killErrors;
//================以下为系统函数区=======================//
//全局变量区
var oldInputStyle;
var oldImgStyle;
var firstInput;
var endInput;
var timer;
//显示提示信息层
function showTip(handle,msg) {
//alert(handle.type);
handle.focus();
var pos = getPosition(handle);
var t = pos.top;
var l = pos.left;
document.all.checkMsgDiv.style.left=l-10+getTextLength(handle);
document.all.checkMsgDiv.style.top=t+handle.clientHeight;
document.all.checkMsgTd.innerHTML=msg;
document.all.checkMsgDiv.style.visibility = 'visible';
//隐藏被层遮挡的选择框
HideOverSels("checkMsgDiv");
timer = setTimeout("hideTip();", 2500);
return false;
}
//表单校验函数
function checkFormInput(handle) {
var controlList = handle.elements;
var controlObj;
for(var i=0;i<controlList.length;i++) {
//如果是text控件,需要进行数据校验
controlObj = controlList[i];
if(isControlVisible(controlObj)) {
if(controlObj.type=='text' || controlObj.type=='password') {
//如果不充许为空,则需要判断
if((controlObj.nullable=="false") && (controlObj.value=="")) {
hideTip();
showTip(controlObj,"此输入域不能为空!");
return false;
}
//如果有最小长度限制,则需要判断
if(controlObj.value!='' && controlObj.minlength!=null) {
var realLength = controlObj.value.length;
var needLength = controlObj.minlength;
if(realLength<needLength) {
hideTip();
showTip(controlObj,"此输入域至少需要"+needLength+"个字符!");
return false;
}
}
//判断数据的类型,调用相关的数据校验函数
if(controlObj.datatype!=null && controlObj.value!='') {
var typeStr = controlObj.datatype.toLowerCase();
var firstChar = typeStr.substring(0,1);
firstChar = firstChar.toUpperCase();
typeStr = firstChar+typeStr.substring(1,typeStr.length);
var tempMsg=eval("is"+typeStr+"(controlObj);");
if (tempMsg!=true)
{
hideTip();
showTip(controlObj,"此输入域"+tempMsg);
return false;
}
}
}
}
}
return true;
}
//系统调用接口
function handleKeyDown(event) {
//有按键就要关闭tip层
hideTip();
//home键与end键定位第一个与最后一个输入域上
if(event.srcElement.type!="text" && event.srcElement.type!="textarea" && event.keyCode==36) {
if(firstInput) firstInput.focus();
}
if(event.srcElement.type!="text" && event.srcElement.type!="textarea" && event.keyCode==35) {
if(endInput) endInput.focus();
}
//处理回车切换焦点以及按钮与图片执行功能
if(event.keyCode==13 && event.srcElement.type!="button" && event.srcElement.type!="reset" && event.srcElement.type!="" && event.srcElement.type!="textarea") {
if(event.srcElement.src) {
if(event.srcElement.onclick) {
event.srcElement.fireEvent("onclick")
return;
} else {
event.keyCode=9;
return;
}
} else {
event.keyCode=9;
return;
}
}
//处理图片按钮的快捷键
if(event.altKey && event.keyCode!=18) {
var shortKey=String.fromCharCode(event.keyCode);
var quickKey = "";
for(var i=0;i<document.images.length;i++) {
quickKey = document.images[i].accessKey;
quickKey = quickKey.toUpperCase();
if(quickKey==shortKey) {
if(document.images[i].onclick) {
document.images[i].fireEvent("onclick");
break;
}
}
}
//处理输入对象快捷方式
var inputList = document.body.getElementsByTagName("INPUT");
for(var i=0;i<inputList.length;i++) {
quickKey = inputList[i].accessKey;
quickKey = quickKey.toUpperCase();
if(quickKey==shortKey) {
inputList[i].focus();
break;
}
}
return;
}
if(event.srcElement.type=='text' && event.srcElement.charset!=null) {
//alert(event.srcElement.charset);
if((event.keyCode>48 && event.keyCode<112) || (event.keyCode>127 && event.keyCode!=144)) checkInputChar(event.srcElement,event.keyCode);
}
}
//有效性判断入口
function checkInputChar(handle,keyCode) {
hideTip();
var typeStr = handle.charset.toLowerCase();
var firstChar = typeStr.substring(0,1);
firstChar = firstChar.toUpperCase();
typeStr = firstChar+typeStr.substring(1,typeStr.length);
var tempMsg=eval("input"+typeStr+"(handle,keyCode);");
if (tempMsg!=true)
{
hideTip();
showTip(handle,tempMsg);
}
}
//关闭提示信息层
function hideTip() {
document.all.checkMsgDiv.style.visibility = 'hidden';
//显示被隐藏了的选择框
ShowOverSels("checkMsgDiv");
clearTimeout(timer);
}
//获得文本框中文本的象素单位的宽度
function getTextLength(handle)
{
var range = handle.createTextRange();
return range.boundingWidth;
//return 0;
}
//画一个隐藏的层
function drawTipDiv() {
document.write("<div id=\"checkMsgDiv\" style=\"position:absolute; width:218px; overflow: visible; z-index:1; visibility:hidden; left: 103px; top: 69px; height: 66px; border: 1px none #000000;\"> ");
document.write(" <table width=\"218\" height=\"65\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"checkMsgTable\">");
document.write(" <tr> ");
document.write(" <td height=\"13\" valign=\"top\"><img src=\"/platform/js/t_top.gif\" width=\"218\" height=\"26\"></td>");
document.write(" </tr>");
document.write(" <tr> ");
document.write(" <td height=\"42\" valign=\"top\" background=\"/platform/js/t_bg.gif\">");
document.write(" <table width=\"95%\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" style=\"font:9pt 宋体;\">");
document.write(" <tr>");
document.write(" <td id=\"checkMsgTd\">sdafs </td>");
document.write(" </tr>");
document.write(" </table></td>");
document.write(" </tr>");
document.write(" <tr>");
document.write(" <td height=\"10\" valign=\"bottom\"><img src=\"/platform/js/t_bottom.gif\" width=\"218\" height=\"10\"></td>");
document.write(" </tr>");
document.write(" </table>");
document.write("</div>");
}
//输出样式表
function drawStyle() {
document.write("<style type=\"text/css\">");
document.write("input.activeInput{border-top-color:#0000CC;border-top-width:1px;border-bottom-color:#0000CC;border-bottom-width:1px;border-left-color:#0000CC;border-left-width:1px;border-right-color:#0000CC;border-right-width:1px;}");
document.write("img.activeImg{border-top-color:#3366FF;border-top-width:1px;border-bottom-color:#3366FF;border-bottom-width:1px;border-left-color:#3366FF;border-left-width:1px;border-right-color:#3366FF;border-right-width:1px;}");
document.write("</style>");
}
//控件onFocus事件的侦听器
function onInputFocus() {
if(window.event.srcElement.src) {
if(window.event.srcElement.onclick) {
oldImgStyle = window.event.srcElement.style;
window.event.srcElement.className="activeImg";
}
} else {
oldInputStyle = window.event.srcElement.style;
window.event.srcElement.className="activeInput";
if(window.event.srcElement.select) window.event.srcElement.select();
}
}
//控件onblur事件的侦听器
function onInputBlur() {
if(window.event.srcElement.src) {
window.event.srcElement.className = "";
} else {
window.event.srcElement.className = "";
}
}
//控件onkeypress事件的侦听器
function onInputKeydown () {
handleKeyDown(window.event);
}
//控件onPaste事件的侦听器
function onInputPaste () {
return false;
}
//表单onSubmit事件的侦听器
function onFormSubmit () {
return checkFormInput(window.event.srcElement);
}
//控件onMouseover事件的侦听器
function onInputMouseover () {
onInputFocus();
}
//控年onMouseout事件的侦听器
function onInputMouseout () {
onInputBlur();
}
//为每个可输入控件装载侦听器
function addListener() {
var inputList = document.body.getElementsByTagName("INPUT");
if(inputList[0]) firstInput = inputList[0];
for(var i=0;i<inputList.length;i++) {
inputList[i].attachEvent ('onkeydown', onInputKeydown);
inputList[i].attachEvent ('onfocus', onInputFocus);
inputList[i].attachEvent ('onblur', onInputBlur);
//inputList[i].attachEvent ('onpaste', onInputPaste);
inputList[i].attachEvent ('onmouseover', onInputMouseover);
inputList[i].attachEvent ('onmouseout', onInputMouseout);
}
if(inputList[i-1]) endInput = inputList[i-1];
var inputList = document.body.getElementsByTagName("IMG");
for(var i=0;i<inputList.length;i++) {
inputList[i].attachEvent ('onkeydown', onInputKeydown);
inputList[i].attachEvent ('onfocus', onInputFocus);
inputList[i].attachEvent ('onblur', onInputBlur);
}
document.body.attachEvent('onkeydown', onInputKeydown);
var formList = document.body.getElementsByTagName("FORM");
for(var i=0;i<formList.length;i++) {
formList[i].attachEvent ('onsubmit',onFormSubmit);
}
}
// 隐藏被ID为objID的对象(层)遮挡的所有select
function HideOverSels(objID)
{
var sels = document.getElementsByTagName('select');
for (var i = 0; i < sels.length; i++)
if (Obj1OverObj2(document.all[objID], sels[i]))
sels[i].style.visibility = 'hidden';
}
// 显示被ID为objID的对象(层)遮挡的所有select
function ShowOverSels(objID)
{
var sels = document.getElementsByTagName('select');
for (var i = 0; i < sels.length; i++)
if (Obj1OverObj2(document.all[objID], sels[i]))
sels[i].style.visibility = 'visible';
}
//判断obj1是否遮挡了obj2
function Obj1OverObj2(obj1, obj2)
{
var pos1 = getPosition(obj1)
var pos2 = getPosition(obj2)
var result = true;
var obj1Left = pos1.left - window.document.body.scrollLeft;
var obj1Top = pos1.top - window.document.body.scrollTop;
var obj1Right = obj1Left + obj1.offsetWidth;
var obj1Bottom = obj1Top + obj1.offsetHeight;
var obj2Left = pos2.left - window.document.body.scrollLeft;
var obj2Top = pos2.top - window.document.body.scrollTop;
var obj2Right = obj2Left + obj2.offsetWidth;
var obj2Bottom = obj2Top + obj2.offsetHeight;
if (obj1Right <= obj2Left || obj1Bottom <= obj2Top ||
obj1Left >= obj2Right || obj1Top >= obj2Bottom)
result = false;
return result;
}
// 获取对象的坐标
function getPosition(Obj)
{
var sumTop=0;
var sumLeft=0;
while(Obj!=window.document.body) {
sumTop+=Obj.offsetTop;
if(Obj.tagName.toLowerCase()=='div') {
sumTop-=Obj.scrollTop;
}
sumLeft+=Obj.offsetLeft;
Obj=Obj.offsetParent;
}
return {left:sumLeft,top:sumTop}
}
//判断控件的可见性
function isControlVisible(handle) {
var retValue = true;
while(handle.tagName.toLowerCase()!='form' && handle.style.display.toLowerCase()!='none') {
handle = handle.parentElement;
}
if(handle.style.display=='none') retValue = false;
return retValue;
}
//================以上为系统函数区=======================//
//以下为输入过程中输入内容即时验证函数
//必须输入是数字
function inputNumber(handle,keyCode) {
if(!((keyCode>=48&&keyCode<=57)||(keyCode>=96&&keyCode<=105))) {
window.event.returnValue=false;
return "必须输入数字!即如下字符:<br>1234567890";
} else return true;
}
//必须输入字母
function inputLetter(handle,keyCode) {
if(!((keyCode>=97&&keyCode<=122)||(keyCode>=65&&keyCode<=90))) {
window.event.returnValue=false;
return "必须输入大小写字母!即如下字符:<br>abcdefghijklmnopqrstuvwxyz<br>ABCDEFGHIJKLMNOPQRSTUVWXYZ";
} else return true;
}
//必须输入所有可见字符
function inputVisible(handle,keyCode) {
var pattern = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.@><,-[]{}?/+=|\'":;~!#$%()`";
var keyValue=String.fromCharCode(keyCode);
if(keyCode==190) keyValue = ".";
if(keyCode==189) keyValue = "-";
if(keyCode==188) keyValue = "<";
if(keyCode==219) keyValue = "[";
if(keyCode==221) keyValue = "]";
if(keyCode==191) keyValue = "?";
if(keyCode==187) keyValue = "+";
if(keyCode==220) keyValue = "|";
if(keyCode==222) keyValue = "'";
if(keyCode==186) keyValue = ";";
if(keyCode==192) keyValue = "~";
if(pattern.indexOf(keyValue)!=-1) {
window.event.returnValue=true;
return true;
}else{
window.event.returnValue=false;
return "必须输入可见字符!即如下字符:<br>ABCDEFGHIJKLMNOPQRSTUVWXYZ<br>abcdefghijklmnopqrstuvwxyz<br>0123456789.@><,-[]{}?/+=|\\\'\":<br>;~!#$%()`";
}
}
//必须输入字母与数字
function inputNormal(handle,keyCode) {
var pattern = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var keyValue=String.fromCharCode(keyCode);
if(pattern.indexOf(keyValue)!=-1) {
window.event.returnValue=true;
return true;
}else{
window.event.returnValue=false;
return "必须输入可见字符!即如下字符:<br>ABCDEFGHIJKLMNOPQRSTUVWXYZ<br>abcdefghijklmnopqrstuvwxyz<br>0123456789";
}
}
//================以下为校验函数区=======================//
//函数名说明:is+TypeName,TypeName首字母大写
//参数handle为当前控件句柄
//参数keyCode为当前按钮的值
//返回说明:通过返回"",不通过返回不通过的原因描述
/*格式支持例表
格式字符 格式描述 格式说明
Number 数字型
Userid 用户ID
Username 用户名称
Enterprisename 企业单位名称
Loginname 登录名称
Cardnumber 证件号码
Address 地址
Phone 电话号码
Mobile 手机号码
Postcode 邮政编码
Email 电子邮件
Namesimplicity 姓名简拼
Password 密码
Namestr 名称字符串
DescStr 描述字符串
Pageurl 页面URL
Dirctory 磁盘路径
*/
//判断是否是数字
function isNumber(handle){
var pattern = /^(\d){1,14}$/;
if (!pattern.exec(handle.value)) return "必须输入数字!";
return true;
}
//判断是否是用户账号
function isUserid(handle){
var pattern = /^(\d|\w){3,14}$/;
if (!pattern.exec(handle.value)) return "必须输入数字<br>且长度需大于等于3位小于等于14位!";
return true;
}
//判断是否用户名称可以是字母也可以是中文
function isUsername(handle){
var pattern = /^[a-zA-Z\u4E00-\u9FA5]{2,50}$/;
if (!pattern.exec(handle.value)) return "必须是中文字母或者数字<br>且长度需大于等于2位小于等于50位!"
return true;
}
//判断是否是企业名称:可以是字母 数字 中文 - _
function isEnterprisename(handle){
var pattern = /^[a-zA-Z0-9-_\u4E00-\u9FA5]{2,200}$/;
if (!pattern.exec(handle.value)) return "必须是中文字母或者数字<br>且长度需大于等于2位小于等于200位!";
return true;
}
//判断是否是登录名称
function isLoginname(handle){
var pattern = /^([a-z]|[A-Z]|[0-9]){2,25}$/;
if (!pattern.exec(handle.value)) return "必须是字母或者数字<br>且长度需大于等于2位小于等于25位!";
return true;
}
//判断是否是证件号码
function isCardnumber(handle){
var pattern;
pattern = /^(\d){5,18}$/;
if (!pattern.exec(handle.value)) return "必须是数字<br>且长度需大于等于5位小于等于16位!";
return true;
}
//地址
function isAddress(handle){
var pattern = /^[a-zA-Z0-9\u4E00-\u9FA5]{2,200}$/;
if (!pattern.exec(handle.value)) return "必须是中文字母或者数字<br>且长度需大于等于2位小于等于200位!";
return true;
}
//联系电话
function isPhone(handle){
var pattern = /^(\d){6,30}$/;
if (!pattern.exec(handle.value)) return "必须是数字<br>且长度需大于等于6位小于等于30位!";
return true;
}
//手机
function isMobile(handle){
var pattern = /^[1][3](\d){9}$/;
if (!pattern.exec(handle.value)) return "必须是数字<br>且首两位是13长度是11位!";
return true;
}
//邮编
function isPostcode(handle){
var pattern = /^(\d){6}$/;
if (!pattern.exec(handle.value)) return "必须是数字<br>且长度需是6位!";
return true;
}
function isEmail(handle){
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
if (!pattern.exec(handle.value)) return "必须符合电子邮件地址格式";
return true;
}
//简拼
function isNamesimplicity(handle){
var pattern = /^([a-zA-Z]){2,25}$/;
if (!pattern.exec(handle.value)) return "必须是字母<br>且长度需大于等于2位小于等于25位!";
return true;
}
//密码
function isPassword(handle){
var pattern = /^([a-zA-Z]|[0-9]){2,25}$/;
if (!pattern.exec(handle.value)) return "必须是字母或者数字<br>且长度需大于等于2位小于等于25位!";
return true;
}
//判断是否是名称:可以是字母 数字 中文 - _
function isNamestr(handle){
var pattern = /^[a-zA-Z0-9-_\u4E00-\u9FA5]{1,40}$/;
if (!pattern.exec(handle.value)) return "必须是中文字母或者数字<br>且长度需大于等于1位小于等于40位!";
return true;
}
//判断是否是描述信息:可以是字母 数字 中文 - _ , .
function isDescstr(handle){
var pattern = /^[a-zA-Z0-9-_,.\u4E00-\u9FA5]{1,50}$/;
if (!pattern.exec(handle.value)) return "必须是中文字母或者数字<br>且长度需大于等于1位小于等于50位!";
return true;
}
//页面URL
function isPageurl(handle){
var pattern = /^[a-zA-Z0-9-_,./\u4E00-\u9FA5]{1,80}$/;
if (!pattern.exec(handle.value)) return "必须是中文字母或者数字<br>且长度需大于等于`位小于等于80位!";
return true;
}
//目录路径
function isDirctoryurl(handle){
var pattern = /^[a-zA-Z0-9-_,.\\u4E00-\u9FA5]{1,300}$/;
if (!pattern.exec(handle.value)) return "必须是中文字母或者数字<br>且长度需大于等于1位小于等于300位!";
return true;
}
/*
//高强度身份号码验证
var aCity={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:"国外"}
function cidInfo(sId){
var iSum=0
var info=""
if(!/^\d{17}(\d|x)$/i.test(sId))return false;
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地区";
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/"))
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日";
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
if(iSum%11!=1)return "Error:非法证号";
return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
}
document.write(cidInfo("380524198002300016"),"<br/>");
document.write(cidInfo("340524198002300019"),"<br/>")
document.write(cidInfo("340524197711111111"),"<br/>")
document.write(cidInfo("34052419800101001x"),"<br/>");
function isip(s){
var check=function(v){try{return (v<=255 && v>=0)}catch(x){return false}};
var re=s.split(".")
return (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false
}
var s="202.197.78.129";
alert(isip(s))*/
//================以上为校验函数区=======================//