部落格

[文件]演算法研究-3-中華民國統一編號檢驗演算法

"

[文件]演算法研究-3-中華民國統一編號檢驗演算法

Definition:
常看到的 8 位數統一編號其實也是有規則可以驗證的,其規則如下:
1. 假設統一編號是:a1, a2, a3, a4, a5, a6, a7, a8,其中:
 a1 * 1
 a2 * 2
 a3 * 1
 a4 * 2          a1 - a7 的乘積若為二位數,則將十位數與個位數相加
 a5 * 1
 a6 * 2
 a7 * 4
 a8 * 1 (a8 為檢查碼)
2. 較之前幾個編號規則不同的地方是,統一編號的規則有兩種正確的條件:
 (1). 將 a1 ~ a8 的總數值加總若能被 10 整除,即為正確的統一編號
 (2). 若不正確,但 a7 值為 7,此時總數值加 1 後能被 10 整除也仍然正確

Example:
看起來有點頭昏了,還是來個實例比較好!
35701598 是輔仁大學的統一編號,就以這個做範例來驗證吧 : P
a1 => 3 * 1 = 3
a2 => 5 * 2 = 10 => 1
a3 => 7 * 1 = 7
a4 => 0 * 2 = 0
a5 => 1 * 1 = 1
a6 => 5 * 2 = 10 => 1
a7 => 9 * 4 = 36 => 9
a8 => 8 * 1 = 8
加總:3 + 1 + 7 + 0 + 1 + 1 + 9 + 8 = 30
30 % 10 = 0 => 故正確!

Algorithm (using JAVA like pseudocode):
/**********************************************************************/
input:uninum => a united serial number as string
output:a bool value (true or false)
/**********************************************************************/
public,atatic boolean united_verify(string[] uninum){
 // initialize variables and,atring
 int sum = 0;
 int[] para = {1,2,1,2,1,2,4,1};
 /* STEP 1 */
 for (int i = 0; i < 8; i++)
 {
  int temp = uninum[i] * para[i];
  if (temp >= 10)
  {
   string[] sp = temp.split("");
   temp = sp[0] + sp[1];
  }
  sum += temp;
 }
 /* STEP 2 */
 if (!sum % 10)
 {
  return true;
 }
 else
 {
  if (uninum[6] == 7)
  {
   return (!(sum + 1) % 10) ? true : false;
  }
 }
}
/**********************************************************************/

"

[文件]演算法研究-2-信用卡卡號檢驗演算法

"

[文件]演算法研究-2-信用卡卡號檢驗演算法

Definition:
上次介紹了中華民國身分證字號的檢驗演算法,這次介紹信用卡卡號的驗證演算法,
其實出乎意料的,信用卡卡號的驗證要比身分證字號的規則簡單多了?o_O
目前無論 Visa 或 MasterCard、JBC 等信用卡,卡號都一樣是 16 碼,假設為:

a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11,a12,a13,a14,a15,a16

驗證規則:
1. 先將 a02,a04,a06,a08,a10,a12,a14 這七個偶數碼的數字加總起來
2. 再將 a01,a03,a05,a07,a09,a11,a13,a15 這八個奇數碼的數字:
 (1). 若小於 5 則將該數 * 2
 (2). 若大於等於 5 則將該數 * 2 - 10  + 1
 (3). 處理完 (1)、(2) 兩步驟後再將這八個結果加總
3. 將 1、2 兩步驟加總的數字相加起來
4. 將這個數字 % 10 取餘數
5. 再用 10 - 該餘數,即為我們要的結果
6. 將這個結果值與 a16 檢查碼比較,相同則為正確

Example:
因信用卡卡號涉及線上交易等隱私,故在此就不找範例了,
各位有興趣可以在家拿自己的信用卡來試試看 : P

Algorithm (using JAVA like pseudocode):
/**********************************************************************/

input:cardnum => a credit card number as string
output:a bool value (true or false)
/**********************************************************************/
public,atatic boolean card_verify(string[] cardnum){
 // initialize variables and,atring
 int sum1 = 0, sum2 = 0, total, remainder, result;
 /* STEP 1 */
 for (int i = 1; i <= 13; i = i + 2)
 {
  sum1 += cardnum[i];
 }
 /* STEP 2 */
 for (int j = 0; j <= 14; j = j + 2)
 {
  sum2 += (cardnum[j] < 5) ? cardnum[j] * 2 : (cardnum[j] * 2) - 9;
 }
 /* STEP 3 */
 total = sum1 + sum2;
 /* STEP 4 */
 remainder = total % 10;
 /* STEP 5 */
 result = 10 - remainder;
 /* STEP 6 */
 return (result == cardnum[15]) ? true : false;
}
/**********************************************************************/

"

技術

ASP.NET←較新技術但語法較不同

MicrosoftSQL←用ASP.NET就得被限制用微軟的資料庫了

或者是....

JSP←跟JAVA扯上關係應該比較好上手吧

MYSQL←不用受限微軟了~~~

 一定會用到AJAX的!

大概就先這樣吧!搞不好家個FLASH動畫也說不定?!

[文件]演算法研究-1-中華民國身份證字號檢驗演算法

"

[文件]演算法研究-1-中華民國身份證字號檢驗演算法

Definition:
我國目前所使用的身份證字號規格如下:
1. 第一位英文字母將對照一組二位數字,對照表如下:
 台北市 A 10  新竹市 O 35
 台中市 B 11  彰化縣 N 22
 基隆市 C 12  雲林縣 P 23
 台南市 D 13  嘉義縣 Q 24
 高雄市 E 14  台南縣 R 25
 台北縣 F 15  高雄縣 S 26
 宜蘭縣 G 16  屏東縣 T 27
 桃園縣 H 17  花蓮縣 U 28
 新竹縣 J 18  台東縣 V 29
 苗栗縣 K 19  澎湖縣 X 30
 台中縣 L 20  陽明山 Y 31
 南投縣 M 21  嘉義市 I 34
2. 將所得二位數字加剩餘的九位數字前八位由左至右做乘法計算:
 第1位*1、第2位*9、第3位*8、第4位*7 ... 第8位*1
 最後一位數因為是檢查碼,故不需計算
3. 將這十組乘積相加總
4. 將上式所得之總和除以十求餘數
5. 用 10 減掉上式所得的餘數,即得檢查碼。

Example:
一個看似胡亂填寫的身分證字號:A123456789,來檢查看它對不對吧!
1. A = 10,所以目前數字為 1 0 1 2 3 4 5 6 7 8 (9為檢查碼)
2. (1*1), (0*9), (1*8), (2*7), (3*6), (4*5), (5*4), (6*3), (7*2), (8*1)
3. 1+0+8+14+18+20+20+18+14+8 = 121
4. 121 % 10 = 1
5. 10 - 1 = 9 洽好等於檢查碼,故 A123456789 看似亂填的身分證字號,卻是正確的!

Algorithm (using JAVA like pseudocode):
/**********************************************************************/

input:pid => a personal ID string
output:a bool value (true or false)
/**********************************************************************/
public static boolean PID_verify(string[] pid){
 // initialize variables and string
 string[] temp, obtain;
 int result = 0, remainder;
 int[] table = {"A"=>10, "B"=>11, "C"=>12, "D"=>13, "E"=>14,
      "F"=>15, "G"=>16, "H"=>17, "I"=>34,  "J"=>18,
      "K"=>19, "L"=>20, "M"=>21, "N"=>22, "O"=>35,
      "P"=> 23, "Q"=>24, "R"=>25, "S"=>26, "T"=>27,
      "U"=>28, "V"=>29, "X"=>30, "Y"=>32
      };          // 首位字母對照二位數表
 /* STEP 1 */
 obtain = int[pid[0]];        // 取得首位字母的二位數
 push (obtain) into temp[];
 for (int i = 1; i < 9; i++)
 {
  push (pid[i]) into temp[];
 }
 temp = split("").temp;       // 將 temp 陣列切成一個一個單獨的數字
 /* STEP 2 & STEP 3 */
 for (int j = 0; j < sizeof(temp); j++)
 {
  if (j == 0)
  {
   result += temp[j] * 1;
  }
  else
  {
   result += temp[j] * (10 - j);
  }
 }
 /* STEP 4 */
 remainder = result % 10;
 /* STEP 5 */
 return (remainder == pid[9]) ? true : false;
}
/**********************************************************************/

"

Lab 2 : Dynamic HTML

"

This is Lab 2 for Web Fundamental course

Create a web-base system using DHTML

In this site, I use Dynamic positioning to create a dynamic text growing and shrinking.

Event onload, onclick, onmousemove, and bubbling also take part in this page.

For some entertainment, there are Filter blur, wave, dropShadow, and light.

You can see the page here

Again, I will give a credit to my friend, Oscar, the one who host my web Page.

"

開放原始碼理念的開放式課程 原型計畫 (E-learning)

"

這是屬於E-learning 的一種,目前這個網站有世界各大知名大學所提供的教育課程,包括麻省理工學院(MIT),約翰霍普金斯大學...等等,可以讓學生的視野拓展開來-看看外國的知名大學的課程內容是怎樣,教育方式又如何,相信E-learning以後會越來越發達。

詳情請至  我的Blog

[@more@]"

頁面