/*
* JavaScript 公用数据校验模块 for taiping project
*/
/*
函数清单:
1.检查输入参数是否全为数字
CheckNumber
2.检查输入参数是否为整数
CheckInteger
3.检查输入参数是否为浮点数
CheckFloat
4.检查输入参数是否为合法的日期
CheckDate
CheckDate2
5.检查输入参数是否为合法的email地址
CheckEmail
6.检查输入参数是否为合法的身份证号码
CheckID
7.检查电话号码是否正确
CheckTelephone
8.检查密码,只能为字母或数字
CheckPassword
9.检查BP机号码
CheckBp
10.检查电话号码
CheckAreaPhone
11.检查是否全为字母
IsLetter
12.检查年龄
CheckAge
13.检查是否全为空格
AllSpace
14.检查日期在给定日期之后
DateIsLargerThanNow2
15.检查日期在当前日期之后
DateIsLargerThanNow
16.将日期转化为标准格式( from yyyymmdd to yyyy-mm-dd)
Date2StandardFmt(date_string)
17.将form中,日期文本对象转化为标准格式( from yyyymmdd to yyyy-mm-dd)
DateObj2StandardFmt(date_obj)
18. 从合法身份证取生日
GetBirthdayFromID(id_value)
19. 从合法身份证取性别
GetGenderFromID(id_value)
20. 检查是否为当日以前的合法日期
IsByPastDate(str1)
21.检查字段是否为空
22.检查字段是否超过指定长度
checkLength(obj,len)
*/
// 1.检查输入参数是否全为数字
function CheckNumber(str){
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
} else if(str.length==0){
rc=false;
} else {
for(i=0;i<str.length;i++){
if(str.charAt(i)<'0' || str.charAt(i)>'9'){
rc=false;
break;
}
}
}
return rc;
}
function checkNumber(str){
return CheckNumber(str);
}
// 2.检查输入参数是否为整数
function CheckInteger(str){
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
} else if(str.length==0){
rc=false;
}else{
for(i=0;i<str.length;i++){
if((i==0) && (str.charAt(i)=='-') && (str.length==1)){
rc=false;
break;
}
if(i==0 && str.charAt(i)=='-'){
continue;
}
if(str.charAt(i)<'0' || str.charAt(i)>'9'){
rc=false;
break;
}
}
}
return rc;
}
function checkInteger(str){
return CheckInteger(str);
}
// 3.检查输入参数是否为浮点数
function CheckFloat(str){
var rc=true;
oneDecimal=false;
if (str+"" == "undefined" || str == null){
rc=false;
} else if(str.length==0){
rc=false;
}else{
for(i=0;i<str.length;i++){
ch=str.charAt(i);
if((i==0) && (ch=='-') && (str.length==1)){
rc=false;
break;
}
if(i==0 && ch=='-'){
continue;
}
if((i==0) && (ch=='.') && (str.length==1)){
rc=false;
break;
}
if(ch=="." && !oneDecimal){
oneDecimal=true;
continue;
}
if ((ch< "0") || (ch >'9')){
rc=false;
break;
}
}
}
return rc;
}
function checkFloat(str){
return CheckFloat(str);
}
// 4.检查输入参数是否为合法的日期
// modified by rock, 2001-7
function CheckDate(year,month,day){
if(!CheckNumber(year)){
return false;
}
if(!CheckNumber(month)){
return false;
}
if(!CheckNumber(day)){
return false;
}
var dat = new Date(year - 1900, month - 1, day);
if (dat.getMonth() == (month-1)) {
return true;
} else {
return false;
}
}
function checkDate(year,month,day){
return CheckDate(year,month,day);
}
function CheckDate2(str1){
if (str1 + "" == "undefined" || str1 == null){
return false;
}
var y,m,d;
var i;
i = str1.indexOf("-");
if (i == -1 || i == str1.length) { return false; }
y = str1.substring(0, i);
str1 = str1.substring(i + 1);
i = str1.indexOf("-");
if (i == -1 || i == str1.length) { return false; }
m = str1.substring(0, i);
d = str1.substring(i + 1);
return CheckDate(y,m,d);
}
function checkDate2(str1) {
return CheckDate2(str1);
}
// 5.检查输入参数是否为合法的email地址
function CheckEmail(str){
var CHAR_LETTER_NUMERIC=1;
var CHAR_UNDERLINE=2;
var CHAR_DOT=3;
var CHAR_AT=4;
var CHAR_DIVIDE=5;
var CHAR_END=6;
var CHAR_OTHER=7;
var DIV_CHAR=',';
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
return rc;
} else if(str.length==0){
rc=true;
return rc;
}
var exit_flag=false;
var total_char=str.length;
var pos=0;
var cur_char;
var cur_status=0;
while((pos<=total_char) && (!exit_flag)){
if(pos==total_char){
cur_char=CHAR_END;
}
else if (str.charAt(pos)=='.'){
cur_char=CHAR_DOT;
}
else if (str.charAt(pos)==DIV_CHAR){
cur_char=CHAR_DIVIDE;
}
else if(str.charAt(pos)=='_'){
cur_char=CHAR_UNDERLINE;
}
else if(str.charAt(pos)=='@'){
cur_char=CHAR_AT;
}
else if(((str.charAt(pos)>='a')&&(str.charAt(pos)<='z'))||((str.charAt(pos)>='A')&&(str.charAt(pos)<='Z'))||((str.charAt(pos)>='0')&&(str.charAt(pos)<='9'))||(str.charAt(pos)=='-')){
cur_char=CHAR_LETTER_NUMERIC;
}
else{
cur_char=CHAR_OTHER;
}
switch (cur_status){
case -1://error
rc=false;
exit_flag=true;
break;
case 0://初始状态
if((cur_char==CHAR_LETTER_NUMERIC)||(cur_char==CHAR_UNDERLINE)||(cur_char==CHAR_DOT)){
cur_status=1;
}
else{
rc=false;
cur_status=-1;
}
break;
case 1://用户名
if((cur_char==CHAR_LETTER_NUMERIC)||(cur_char==CHAR_UNDERLINE)||(cur_char==CHAR_DOT)){
cur_status=1;
}
else if(cur_char==CHAR_AT){
cur_status=2;
}
else{
rc=false;
cur_status=-1;
}
break;
case 2://@
if(cur_char==CHAR_LETTER_NUMERIC){
cur_status=6;
}
else{
rc=false;
cur_status=-1;
}
break;
case 6://"."
if(cur_char==CHAR_LETTER_NUMERIC){
cur_status=6;
}
else if(cur_char==CHAR_DOT){
cur_status=3;
}
else{
rc=false;
cur_status=-1;
}
break;
case 3://fisrt domain name
if(cur_char==CHAR_LETTER_NUMERIC){
cur_status=4;
}
else{
rc=false;
cur_status=-1;
}
break;
case 4://not first domain name
if(cur_char==CHAR_LETTER_NUMERIC){
cur_status=4;
}
else if(cur_char==CHAR_DOT){
cur_status=3;
}
else if(cur_char==CHAR_DIVIDE){
cur_status=0;
}
else if(cur_char==CHAR_END){
cur_status=5;
}
else{
rc=false;
cur_status=-1;
}
break;
case 5://ok
rc=true;
exit_flag=true;
break;
default:
rc=false;
exit_flag=true;
break;
}
pos++;
}
return rc;
}
function checkEmail(str){
return CheckEmail(str);
}
// 6.检查输入参数是否为合法的身份证号码
//18位身份证号码参考 GB 11643
function CheckID(sID){
var W=new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
var rc=false;
if((sID+"" == "undefined") || (sID == null)){
return rc;
}
else if(sID.length==15){
rc=true;
}
else if(sID.length==18){
var nCount=0;
var nIdNum=0;
for(var i=0;i<18;i++){
var c=sID.charAt(i);
if((c=='X')||(c=='x')){
nIdNum=10;
}
else if((c<='9')||(c>='0')){
nIdNum=c-'0';
}
else{
return rc;
}
nCount+=nIdNum*W[i];
}
if((nCount%11)==1){
rc=true;
}
}
return rc;
}
function checkID(str){
return CheckID(str)
}
// 7.检查电话号码是否正确
function CheckTelephone(str) {
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
} else {
for(i=0;i<str.length;i++) {
if(!(str.charAt(i)>='0' && str.charAt(i)<='9')&& str.charAt(i)!='*' && str.charAt(i)!='('&& str.charAt(i)!=')'&& str.charAt(i)!='-'){
rc= false;
break;
}
}
}
return rc;
}
function checkTelephone(phone){
return CheckTelephone(phone);
}
// 8.检查密码,只能为字母或数字
function CheckPassword(str) {
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
} else {
for(i=0;i<str.length;i++) {
if(str.charAt(i)<'0'||(str.charAt(i)>'9' && str.charAt(i)<'A')||(str.charAt(i)>'Z' && str.charAt(i)<'a')||str.charAt(i)>'z'){
rc= false;
break;
}
}
}
return rc;
}
function checkPassword(str){
return CheckPassword(str);
}
// 9.检查BP机号码
function CheckBp(str) {
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
} else {
for(i=0;i<str.length;i++) {
if((str.charAt(i)<'0' || str.charAt(i)>'9')&&(str.charAt(i)!='-'||str.charAt(i)!='*')){
rc= false;
break;
}
}
}
return rc;
}
function checkBp(str){
return CheckBp(str);
}
// 10.检查电话号码
function CheckAreaPhone(str) {
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
} else {
for(i=0;i<str.length;i++) {
if((str.charAt(i)<'0' || str.charAt(i)>'9')&&str.charAt(i)!='-'&&str.charAt(i)!='*'){
rc= false;
break;
}
}
}
return rc;
}
function checkAreaPhone(str){
return CheckAreaPhone(str)
}
// 11.检查是否全为字母
function IsLetter(str){
var rc=true;
if (str+"" == "undefined" || str == null){
rc=false;
} else {
for(i=0;i<str.length;i++) {
if((str.charAt(i)>'Z' && str.charAt(i)<'a')||str.charAt(i)<'A' || str.charAt(i)>'z'){
rc=false;
break;
}
}
}
return rc;
}
function isLetter(str){
return IsLetter(str);
}
// 12.检查年龄
function CheckAge(age){
var rc=true;
if(CheckNumber(age)==false) {
rc= false;
} else if(age>=200) {
rc= false;
} else if(age<0){
rc=false;
}
return rc;
}
function checkAge(age){
return CheckAge(age);
}
// 13.检查是否全为空格
function AllSpace(str) {
for(i=0;i<str.length-1;i++) {
if(str.charAt(i)!=' ') {
if(str.charAt(i)!=0xa1||str.chatAt(i+1)!=0xa1)
return false;
else
i++;
}
}
if(str.charAt(i)!=' ')
return false;
return true;
}
function allSpace(str) {
return AllSpace(str);
}
// 14.检查日期在给定日期之后
function DateIsLargerThanNow2(year, month, day, nowdate){
var rc=false;
if(!CheckDate(year,month,day)){
rc=true;
} else{
var d1=new Date(year,month-1,day);
var d0=new Date();
if(d1.getTime()>d0.getTime()){
rc=true;
}
}
return rc;
}
function dateIsLargerThanNow2(year, month, day, nowdate){
return DateIsLargerThanNow2(year, month, day, nowdate);
}
// 15.检查日期在当前日期之后
function DateIsLargerThanNow(year, month, day){
return DateIsLargerThanNow2(year,month,day,(new Date()));
}
function dateIsLargerThanNow(year, month, day){
return DateIsLargerThanNow(year,month,day);
}
// 16.检查身份证
function CheckCertiCode(id) {
// check length
try {
if (id.length!=15 && id.length!=18) {
alert("身份证长度非法!");
return 1;
}
// check birth
if (id.length == 15) {
var birthday_year = "19" + id.substring(6, 8);
var birthday_month = id.substring(8, 10);
var birthday_day = id.substring(10, 12);
if ( CheckDate(birthday_year, birthday_month, birthday_day)==false ) {
alert("身份证出生日期非法!");
return 2;
}
}
if (id.length == 18) {
var birthday_year = id.substring(6, 10);
var birthday_month = id.substring(10, 12);
var birthday_day = id.substring(12, 14);
if ( CheckDate(birthday_year, birthday_month, birthday_day)==false ) {
alert("身份证出生日期非法!");
return 3;
}
// check parity bit
}
} // end of try
catch(e){
window.alert ("校验身份证出错"+e.description);
return 4;
}
return 0;
}
// 17.检查身份证与生日、性别 (M:male;F:female)
function CheckIDBirthGender(id, birth, gender) {
// check birth
try {
if (id.length == 15) {
var id_birthday = "19" + id.substring(6, 8) +"-"+ id.substring(8, 10) +"-"+ id.substring(10, 12);
var id_gender = id.substring(14);
}
else {
var id_birthday = id.substring(6, 10) +"-"+ id.substring(10, 12) +"-"+ id.substring(12, 14);
var id_gender = id.substring(16, 17);
}
if ( birth!=id_birthday ) {
alert("生日与身份证不符!");
return 1;
}
if (gender=="M" || gender=="m") {
if ( id_gender!="1" && id_gender!="3" && id_gender!="5" && id_gender!="7" && id_gender!="9" ) {
alert("性别与身份证不符!");
return 2;
}
}
else {
if ( id_gender!="2" && id_gender!="4" && id_gender!="6" && id_gender!="8" && id_gender!="0" ) {
alert("性别与身份证不符!");
return 2;
}
}
} // end of try
catch(e){
window.alert ("校验身份证出错"+e.description);
return 3;
}
return 0;
}
// if date is error, the input date_string will be returned
// else return the date string with stardard format
function Date2StandardFmt( date_string ) {
if (date_string == "")
return;
var date_src_string = date_string
if ((date_string.length!=8 && date_string.length!=10)
|| (date_string.length==10 && date_string.indexOf("-")<0) ) {
return date_src_string;
}
// no split character
if ( date_string.indexOf("-")<0 ) {
date_string = date_string.substring(0, 4) +"-"+date_string.substring(4, 6)+"-"+date_string.substring(6);
}
var date_year = date_string.substring(0, 4);
var date_month = date_string.substring(5, 7);
var date_day = date_string.substring(8);
if ( CheckDate(date_year, date_month, date_day)==false ) {
return date_src_string;
}
return date_string;
}
// if date is error, error msg will be alerted
// else upt the date obj's value to standard format
function DateObj2StandardFmt( date_obj ) {
var date_string = date_obj.value;
if (date_string == "")
return;
if ((date_string.length!=8 && date_string.length!=10)
|| (date_string.length==10 && date_string.indexOf("-")<0) ) {
date_obj.focus();
alert("日期长度非法!");
return;
}
// no split character
if ( date_string.indexOf("-")<0 ) {
date_string = date_string.substring(0, 4) +"-"+date_string.substring(4, 6)+"-"+date_string.substring(6);
}
var date_year = date_string.substring(0, 4);
var date_month = date_string.substring(5, 7);
var date_day = date_string.substring(8);
if ( CheckDate(date_year, date_month, date_day)==false ) {
date_obj.focus();
alert("日期非法!");
return ;
}
date_obj.value = date_string;
}
// if date is error, error msg will be alerted
// else upt the date obj's value to format
//add by wencai.yan 2001-11-09
function DateObj2Fmt( date_obj ) {
var date_string = date_obj.value;
if (date_string == "")
return;
if (
( date_string.length!=4 && date_string.length!=6 && date_string.length!=7
&& date_string.length!=8 && date_string.length!=10
)
|| (date_string.length==7 && date_string.indexOf("-")<0)
|| (date_string.length==10 && date_string.indexOf("-")<0)
) {
date_obj.focus();
alert("日期长度非法!");
return;
}
// no split character
if ( date_string.indexOf("-")<0 && date_string.length==8 ) {
date_string = date_string.substring(0, 4) +"-"+date_string.substring(4, 6)+"-"+date_string.substring(6);
}
if ( date_string.indexOf("-")<0 && date_string.length==6 ) {
date_string = date_string.substring(0, 4) +"-"+date_string.substring(4);
}
if(date_string.length>=8){
var date_year = date_string.substring(0, 4);
var date_month = date_string.substring(5, 7);
var date_day = date_string.substring(8);
if ( CheckDate(date_year, date_month, date_day)==false ) {
date_obj.focus();
alert("日期非法!");
return ;
}
}
if(date_string.length<8 && date_string.length>4){
var date_year = date_string.substring(0, 4);
var date_month = date_string.substring(5, 7);
var date_day = "01";
if ( CheckDate(date_year, date_month,date_day)==false ) {
date_obj.focus();
alert("日期非法!");
return ;
}
}
if(date_string.length=4){
var date_year = date_string.substring(0, 4);
var date_month = "01"
var date_day = "01";
if ( CheckDate(date_year, date_month,date_day)==false ) {
date_obj.focus();
alert("日期非法!");
return ;
}
}
date_obj.value = date_string;
}
// return value : M 男 F 女
function GetGenderFromID( id_value ) {
var gender;
var id_gender;
if ( id_value.length==15 )
id_gender = id_value.substring(14);
else if ( id_value.length==18 )
id_gender = id_value.substring(16, 17);
else
return "";
if ( id_gender=="1" || id_gender=="3" || id_gender=="5" || id_gender=="7" || id_gender=="9" ) {
gender = "M";
}
else {
gender = "F";
}
return gender;
}
// return value : yyyy-mm-dd
function GetBirthdayFromID( id ) {
try {
var birthday;
if ( id.length==15 )
birthday = "19" + id.substring(6, 8)+"-"+id.substring(8, 10)+"-"+id.substring(10, 12);
else if ( id.length==18 )
birthday = id.substring(6, 10)+"-"+id.substring(10, 12)+"-"+id.substring(12, 14);
else
birthday = "";
return birthday
}
catch(e){
window.alert ("解析身份证出错"+e.description);
return "";
}
}
// 20. 检查是否为当日以前的合法日期
// add by rock
function IsByPastDate(str1) {
if (str1 + "" == "undefined" || str1 == null){
return false;
}
var y,m,d;
var i;
i = str1.indexOf("-");
if (i == -1 || i == str1.length) { return false; }
y = str1.substring(0, i);
str1 = str1.substring(i + 1);
i = str1.indexOf("-");
if (i == -1 || i == str1.length) { return false; }
m = str1.substring(0, i);
d = str1.substring(i + 1);
return !DateIsLargerThanNow(y,m,d);
}
//21.检查字段是否为空
function checkNull(fieldName,description){//检查字段是否为空
if (fieldName.value==""){
window.alert (description);
fieldName.focus();
return false;
}
return true;
}
/**保留两位小数的round方法*/
function toDecimal2(amount){
return toDecimal(amount,2);
}
/**保留指定小数位数的round方法*/
function toDecimal(amount,dec){
return Math.round(amount*Math.pow(10,dec))/Math.pow(10,dec)
}
//22.检查字段是否超过指定长度
function checkLength(obj,len){
if(obj.value.length>len){
alert("该输入框的最大字数不得超过"+len);
obj.focus();
}
}
/**当光标离开当前输入框时,校验日期**/
function onBlurCheckDate(obj){
if ( obj.value == "" ){
return;
}
obj.value = Date2StandardFmt(obj.value);
if (obj.value=="" || obj.value.length!=10) {
alert("请按yyyy-mm-dd或yyyymmdd格式正确输入日期");
obj.value = "";
obj.focus();
}
}
/**
*校验两个日期的先后
*返回值:
*如果其中有一个日期为空,校验通过, 返回true
*如果起始日期早于等于终止日期,校验通过, 返回true
*如果起始日期晚于终止日期, 返回false 参考提示信息: 起始日期不能晚于结束日期。
*/
function checkDateEarlier(strStart,strEnd)
{
//如果有一个输入为空,则通过检验
if (( strStart == "" ) || ( strEnd == "" ))
return true;
var arr1 = strStart.split("-");
var arr2 = strEnd.split("-");
var date1 = new Date(arr1[0],parseInt(arr1[1].replace(/^0/,""),10) - 1,arr1[2]);
var date2 = new Date(arr2[0],parseInt(arr2[1].replace(/^0/,""),10) - 1,arr2[2]);
if(arr1[1].length == 1)
arr1[1] = "0" + arr1[1];
if(arr1[2].length == 1)
arr1[2] = "0" + arr1[2];
if(arr2[1].length == 1)
arr2[1] = "0" + arr2[1];
if(arr2[2].length == 1)
arr2[2]="0" + arr2[2];
var d1 = arr1[0] + arr1[1] + arr1[2];
var d2 = arr2[0] + arr2[1] + arr2[2];
if(parseInt(d1,10) > parseInt(d2,10))
return false;
else
return true;
}//~~~