資料格式判斷 - t104360088/InternRecord GitHub Wiki

統一編號判斷

  1. 八位數
  2. 每位數分別乘上加權值後,得到 8 個新數字 (見範例1)
  3. 將每個新數字的十位數與個位數分開後相加 (見範例2)
  4. 相加後的總數可被 10 整除則為正確
  5. 若統編第七碼為 7,且總數加 1 也可被 10 整除,也為正確 (見範例3)

範例1

加權值:weight = [1, 2, 1, 2, 1, 2, 4, 1] 統編:ubn = [9, 2, 0, 2, 1, 1, 6, 4] 第 i+1 位數加權後:value = weight[i] * ubn[i] 第一位數加權後:value = 1 * 9 = 9 (以此類推)

範例2

被加權後的值:value = [9, 4, 0, 4, 1, 2, 24, 4] 每個數字相加:sum = 9 + 4 + 0 + 4 + 1 + 2 + 2 + 4 + 4 = 30 30 可被 10 整除,故為正確統編

範例3

統編:00003174 總數:19 由於第七位數為 7,且總數加 1 可被 10 整除,故為正確統編

參考文章:https://gist.github.com/kaochenlong/1889703 (但原作者內容有些許錯誤,可看下方回覆或本文皆為正確判斷格式)

身分證字號判斷

  1. 開頭為 A-Z 英文字母,加上 9 個數字
  2. 將英文字母轉換成對應的數字,並放入最前方 (見範例1)
  3. 每位數分別乘上加權值後,得到 11 個新數字 (見範例2)
  4. 11 個新數字相加後的總數可被 10 整除則為正確 (見範例3)

範例1

A-Z對應的數字: 對照圖 身分證字號:idCard = [A, 1, 2, 3, 4, 5, 6, 7, 8, 9] 轉換成數字:number = [1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

範例2

加權值:weight = [1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1] 原數字:number = [1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 新數字:value = [1, 0, 8, 14, 18, 20, 20, 18, 14, 8, 9]

範例3

每個數字相加:sum = 1 + 8 + 14 + 18 + 20 + 20 + 18 + 14 + 8 + 9 = 130 130 可被 10 整除,故為正確身分證

參考文章:http://finalfrank.pixnet.net/blog/post/19639058-%E8%BA%AB%E5%88%86%E8%AD%89%E5%AD%97%E8%99%9F%E9%A9%97%E8%AD%89%E6%96%B9%E6%B3%95

正規表示法 Wiki