js實現填寫身份證號、手機號、准考證號等信息自動空格的效果


  咱們做網站的,用戶體驗那是相當重要的,比如12306搶票需要填寫身份證,如果不空格,密密麻麻的給我一種很壓抑的感覺,而且也不容易核對信息是否填寫正確,所以我就寫了一個利用Js實現填寫身份證號、手機號、准考證號等信息自動空格的效果。

為了方便,自已定義的一個簡單的get()方法和trim()方法,代碼如下:

//獲取對應的對象--function函數.
function get(id) {
    return document.getElementById(id);
}

//去掉所有空格--String類的屬性.
String.prototype.trim = function () {
    return this.replace(/\s+/g, "");
};

 

實例1:身份證號自動空格,支持18位的身份證號碼,格式為"xxx xxx xxxx xxxx xxxx".

//身份證自動空格.
function FillIdentity() {
    var idNumber = get("IDNumber");//頁面上輸入身份證號碼的文本框的Id.
    var idValue = idNumber.value.trim();
    if (idValue != "") {
        var idLength = idValue.length;
        if (idLength <= 3) {
            idNumber.value = idValue;
        } else {
            if (idLength <= 6) {
                idNumber.value = idValue.substring(0, 3) + " " + idValue.substring(3, idLength);
            } else {
                if (idLength <= 10) {
                    idNumber.value = idValue.substring(0, 3) + " " + idValue.substring(3, 6) + " " + idValue.substring(6, idLength);
                } else {
                    if (idLength <= 14) {
                        idNumber.value = idValue.substring(0, 3) + " " + idValue.substring(3, 6) + " " + idValue.substring(6, 10) + " " + idValue.substring(10, idLength);
                    } else {
                        idNumber.value = idValue.substring(0, 3) + " " + idValue.substring(3, 6) + " " + idValue.substring(6, 10) + " " + idValue.substring(10, 14) + " " + idValue.substring(14, idLength);
                    }
                }
            }
        }
    }
}

 

實例2:手機號碼自動空格,支持11位的手機號碼,格式為"xxx xxxx xxxx".

//手機號自動空格.
function FillMobile() {
    var mobile = get("Mobile");//頁面上輸入手機號碼的文本框的Id.
    var mValue = mobile.value.trim();
    if (mValue != "") {
        var mLength = mValue.length;
        if (mLength <= 3) {
            mobile.value = mValue;
        } else {
            if (mLength <= 7) {
                mobile.value = mValue.substring(0, 3) + " " + mValue.substring(3, mLength);
            } else {
                mobile.value = mValue.substring(0, 3) + " " + mValue.substring(3, 7) + " " + mValue.substring(7, mLength);
            }
        }
    }
}

 

實例3:准考證號自動空格,沒有固定的格式,簡單來說就是"四位一空格",格式為"xxxx xxxx xxxx".

//准考證號自動空格.
function FillTicket() {
    var ticket = get("Ticket");//頁面上輸入准考證號的文本框的Id.
    var tValue = ticket.value.trim();
    if (tValue != "") {
        var tLength = tValue.length;
        var count = parseInt(tLength / 4);
        if (count >= 1) {
            ticket.value = "";
            for (var i = 1; i <= count; i++) {
                ticket.value += tValue.substring((i - 1) * 4, (i) * 4);
                if (tLength > (i * 4)) {//不加此判斷會出現遇到空格按退格鍵無效的Bug.
                    ticket.value += " ";
                }
            }
            ticket.value += tValue.substring(count * 4, tLength);
        }
    }
}

 

其他代碼:

驗證身份證號碼是否正確,包括驗證出生日期是否合法,校驗碼是否正確.

//能提示校驗碼的身份證號碼驗證方法.
function FillNumber() {
    var num = get("IDNumber").value.trim();//頁面上輸入身份證號碼的文本框的Id.
    if (num == "") {
        alert("請輸入身份證號!");
        return false;
    }
    num = num.toUpperCase();
    //身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字,最后一位是校驗位,可能為數字或字符X(身份證上是大寫)。   
    if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
        alert('溫馨提示:\n\n輸入的身份證號長度不對,或者號碼不符合規定!\n15位號碼應全為數字,18位號碼末位可以為數字或X!');
        return false;
    }
    //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 
    //下面分別分析出生日期和校驗位 
    var len, re;
    len = num.length;
    if (len == 15) {
        if (isNaN(num)) {
            alert("15位身份證號碼只能為數字!");
            return false;
        }
        re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
        var arrSplit = num.match(re);

        //檢查生日日期是否正確.
        var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
        var bGoodDay;
        bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]));
        if (!bGoodDay) {
            alert('溫馨提示:\n\n您輸入的身份證號碼里出生日期不對,請確認后重新輸入!');
            return false;
        }
        else {
            //將15位身份證轉成18位 
            //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,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];
            alert("當前15位身份證號碼正確!");
            return num;
        }
    }
    if (len == 18) {
        if (isNaN(num.substring(0, 17))) {
            alert("身份證號碼前17位只能為數字!");
            return false;
        }
        re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
        var arrSplit = num.match(re);

        //檢查生日日期是否正確 
        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('溫馨提示:\n\n您輸入的身份證號碼里出生日期(' + arrSplit[2] + arrSplit[3] + arrSplit[4] + ')不對,請確認后重新輸入!');
            return false;
        }
        else {
            if (isNaN(num.substring(17))&&num.substring(17) != "X") {
                alert("18位身份證號碼的校驗碼只能為0至9或者字母‘X’");
                return false;
            }
            //檢驗18位身份證的校驗碼是否正確。 
            //校驗位按照ISO 7064:1983.MOD 11-2的規定生成,X可以認為是數字10。 
            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('溫馨提示:\n\n18位身份證的校驗碼不正確,應該為:' + valnum + ",請您確認后重新輸入!");
                return false;
            }
            alert("當前18位身份證號碼正確!");
            return num;
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM