demoshop

demo, trying to be the best_

因為 jQuery Validate 實在是 Client 端驗證的極品,所以前先日子遇到了個驗證身分證字號的需求,剛好在網路上有找到不錯的範例,使用了以後發生某些英文開頭的身分證字號死都驗證不過於是就修改了一下 code ,再放上來分享給各位。

原始的 code 是參考「http://blog.yorkxin.org/2009/02/03/jquery-validate-roc-citizen-id/」 這裡的

修正身分證字號尾數為 0 的時候會判斷錯誤的問題

要使用jQuery.Validate就必須要先載入 jQuery,怎麼載入的部份 demo 就預設各位都已經會了,如果不了解其實網路上也有不計其數的資料可以搜尋,我在這裡只單純貼上我修改過後的 code 。 

// 台灣身份證字號格式檢查程式
jQuery.validator.addMethod("TWIDCheck", function(value, element, param)
{
    var a = new Array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'W', 'Z', 'I', 'O');
    var b = new Array(1, 9, 8, 7, 6, 5, 4, 3, 2, 1);
    var c = new Array(2);
    var d;
    var e;
    var f;
    var g = 0;
    var h = /^[a-z](1|2)\d{8}$/i;
    if (value.search(h) == -1)
    {
        return false;
    }
    else
    {
        d = value.charAt(0).toUpperCase();
        f = value.charAt(9);
    }
    for (var i = 0; i < 26; i++)
    {
        if (d == a[i])//a==a
        {
            e = i + 10; //10
            c[0] = Math.floor(e / 10); //1
            c[1] = e - (c[0] * 10); //10-(1*10)
            break;
        }
    }
    for (var i = 0; i < b.length; i++)
    {
        if (i < 2)
        {
            g += c[i] * b[i];
        }
        else
        {
            g += parseInt(value.charAt(i - 1)) * b[i];
        }
    }
    if ((g % 10) == f)
    {
        return true;
    }
    if ((10 - (g % 10)) != f)
    {
        return false;
    }
    return true;
}, "請輸入有效的身份證字號!");

身分證字號的規則可以參考demo之前的文章「http://demo.tc/Post/383

 

demo廢言以上邏輯使用過亂數1000筆的身分證字號驗證過

 

回應討論