Selected Category: JS筆記 (4)

View Mode: Post List Post Summary
之前那篇「身份證驗證程式 for PHP (精簡版)」最近有空所以把他改寫Javascript版了,最近Ajax技術很盛行,應該會用到,有需要的網友就引用過去吧!
//**************************************
// 台灣身份證檢查簡短版 for Javascript
//**************************************
function checkTwID(id){
    //建立字母分數陣列(A~Z)
    var city = new Array(
         1,10,19,28,37,46,55,64,39,73,82, 2,11,
        20,48,29,38,47,56,65,74,83,21, 3,12,30
    )
    id = id.toUpperCase();
    // 使用「正規表達式」檢驗格式
    if (id.search(/^[A-Z](1|2)\d{8}$/i) == -1) {
        alert('基本格式錯誤');
        return false;
    } else {
        //將字串分割為陣列(IE必需這麼做才不會出錯)
        id = id.split('');
        //計算總分
        var total = city[id[0].charCodeAt(0)-65];
        for(var i=1; i<=8; i++){
            total += eval(id[i]) * (9 - i);
        }
        //補上檢查碼(最後一碼)
        total += eval(id[9]);
        //檢查比對碼(餘數應為0);
        return ((total%10 == 0 ));
    }
}
//***************************
// 台灣身份證產生簡短版 javascript 版
//***************************
function getTwID(){
    //建立字母分數陣列(A~Z)
    var city = new Array(
         1,10,19,28,37,46,55,64,39,73,82, 2,11,
        20,48,29,38,47,56,65,74,83,21, 3,12,30
    )
    //建立隨機身份證碼
    var id = new Array();
    id[0] = String.fromCharCode(Math.floor(Math.random() * (26)) + 65);
    id[1] = Math.floor(Math.random() * (2)) + 1;
    for(var i=2; i<9; i++){
        id[i] = Math.floor(Math.random() * (9)) + 0;
    }
    //計算總分
    var total = city[id[0].charCodeAt(0)-65];
    for(var i=1; i<=8; i++){
        total += eval(id[i]) * (9 - i);
    }
    //計算最尾碼
    var total_arr = (total+'').split('');
    var lastChar = eval(10-total_arr[total_arr.length-1]);
    var lastChar_arr = (lastChar+'').split('');
    //補上最後檢查碼
    id[id.length++] = lastChar_arr[lastChar_arr.length-1];
    //回傳結果
    return id.join('');
}

Posted by liaosankai at 痞客邦 PIXNET Comments(0) Trackback(0) Hits(52)

標題是我最近用JQuery開發時firebug所提出來的錯誤訊息…= =搞了半天,原來是官方的jquery.js中的dimensions相關函式庫有問題,雖然官方聲稱1.2.6版已經將dimensions包含在裡面,不過似乎還是有問題,所以還是乖乖的獨立載入此函式庫吧!dimensions下載(The dimensions library in jquery.js have some problems,so I try to include dimensions.js alone,and now It's working well!! Download dimensions)

Posted by liaosankai at 痞客邦 PIXNET Comments(0) Trackback(0) Hits(12)

我承認我真的太閒了= =,無聊的我寫了一個將「12345」轉為中文數字「壹萬貳仟參佰肆拾伍元整」的小函式,可是感覺會用到的機率不大,如果哪位有需要就拿去用吧

//========
//使用範例
//========
//壹萬貳仟參佰肆拾伍元整
alert(chineseNumber(12345,'upper'));
//一萬二千三百四十五元整
alert(chineseNumber(12345,'lower'));
//一萬二千三百四十五戰鬥力
alert(chineseNumber(12345,'lower','戰鬥力'));
/*********************************************
* http://doublekai.org/blog/
* copyright 2008 sankai
* licensed under the MIT and GPL licenses.
***********************************************/
function chineseNumber(number,lowerorsupper,tail){
    //轉換值是否為整數
    if(!isNaN(parseInt(number * 1))){
                //--------------
        // 定義變數
                //--------------
                //小寫的中文數字
        var chineseNumber_lower = ('〇一二三四五六七八九').split('');
                //大寫的中文數字
        var chineseNumber_upper = ('零壹貳參肆伍陸柒捌玖').split('');
                //數詞單位陣列
                var chineseOrder = ('十百千元萬億兆京垓秭穰溝澗正載').split('');
        if(tail == null){
            chineseOrder[3] = '元整';
        } else{
            chineseOrder[3] = tail;
        }
                //定義儲存轉換後的數字結果陣列
                var transformNumber = new Array();
        //逆轉數字後的數字陣列
                var numberAsString = new Array();
                //用來記錄移動位數的索引(從tail開始)
                var orderFlag = 3;
                //--------------
        // 數字處理
                //--------------
                //將數字字串化
                number = number+'';
                //逆轉數字後儲入陣列
                for (var i=number.length-1; i>=0; i-- ){
                numberAsString[numberAsString.length++] = number.charAt(i);
                }
                //針對每個英文數字處理
        for(var i=0; i<numberAsString.length; i++){
                //產生對應的中文數字,並且依大小寫有所不同
            if(lowerorsupper == 'upper'){
                numberAsString[i] = chineseNumber_upper[numberAsString[i]];
                                chineseOrder[0] = '拾';
                                chineseOrder[1] = '佰';
                                chineseOrder[2] = '仟';
            } else {
                numberAsString[i] = chineseNumber_lower[numberAsString[i]];
                                chineseOrder[0] = '十';
                                chineseOrder[1] = '百';
                                chineseOrder[2] = '千';
            }
                        //添加數詞
                        switch((i+1)%4){
                                case 1:
                                        transformNumber[numberAsString.length-i] = numberAsString[i]+chineseOrder[orderFlag];
                                break;
                                case 2:
                                        transformNumber[numberAsString.length-i] = numberAsString[i]+chineseOrder[0];
                                break;
                                case 3:
                                        transformNumber[numberAsString.length-i] = numberAsString[i]+chineseOrder[1];
                                break
                                case 0:
                                        transformNumber[numberAsString.length-i] = numberAsString[i]+chineseOrder[2];
                                break;
                        }
                        //每處理四個數字後移動位數索引
                        if((i+1)%4 == 0){
                                orderFlag++;
                        }
        }
                //回傳轉換後的中文數字
                return transformNumber.join('');
    } else {
        return '數字必需為整數';
    }
}
不過這個程式仍然有下列的問題:

1) 輸入10000類的數值,產生的國字數字不是「一萬」,是「壹萬零仟零佰零拾零」

Posted by liaosankai at 痞客邦 PIXNET Comments(1) Trackback(0) Hits(49)

Make JavaScript Math.random() useful這篇文章是由Andrew Penry所寫,他將Javascript中的亂數函式Math.random()使用方式做了詳細說明。下列將原文的例子重新列表一次
/*
【原始】
 範例:Math.random()
值範圍:0 ~ 0.9999999(無窮小數)

【最大值】
 範例:Math.random() * 3
值範圍:0 ~ 2.9999999(無窮小數)

【有最小值】
 範例:Math.random() * 2 + 1
值範圍:1 ~ 1.9999999(無窮小數)

【四捨五入】
 範例:Math.round(Math.random*2+1)
值範圍:(1) - (1.5) - (2) - (2.5) - (3)

【取得大於指定數的最小整數值】
 範例:Math.ceil(Math.random()*2)
值範圍:(0) - (0.5) - (1) - (1.5) - (2)
 注意:在Javascript中,Math.ceil(0) 等於 0

【取得小於指定數的最大整數值】
 範例:Math.floor(Math.random()*2+1)
值範圍:(1) - (1.5) - (2) - (2.5) - (3)
*/

//下列為自訂範圍值的亂數函式(最小值,最大值)
function usefloor(min,max) {
  return Math.floor(Math.random()*(max-min+1)+min);
}
function useceil(min,max) {
  return Math.ceil(Math.random()*(max-min+1)+min-1);
}
function useround(min,max) {
  return Math.round(Math.random()*(max-min)+min);
}
根據Andrew Penry的測試結果,使用floor的方法,各數出現的機率比較平均,所以floor會較好的選擇

Posted by liaosankai at 痞客邦 PIXNET Comments(0) Trackback(0) Hits(1544)