前言
雖然說後端也能做統編驗證,但實務上客戶在下單後,後端還要處理統編驗證再回傳確實會不夠快速。
所以選擇在輸入時前端就直接根據輸入的內容進行判斷來做提示,或是能否進一步結帳等行為。
統一編號說明
統一編號(簡稱:統編)是臺灣營利事業機構的個別法人身分代號,為一組8位數字。機構有開統編及未開統編公司課的稅賦是相同的。
驗證規則如下:
- 假設統一編號為 A B C D E F G H
- A - G 為編號, H 為檢查碼
- A - G 個別乘上特定倍數, 若乘出來的值為二位數則將十位數和個位數相加
- A x 1
- B x 2
- C x 1
- D x 2
- E x 1
- F x 2
- G x 4
- H x 1
- 最後將所有數值加總, 被 10 整除就為正確
- 若上述演算不正確並且 G 為 7 得話, 再加上 1 被 10 整除也為正確
驗證範例 - 傳統形式
直接上 code 吧!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| function check_tax_number() { const gui_number = document.querySelector('.gui_number').value; const cx = [1, 2, 1, 2, 1, 2, 4, 1]; const cnum = gui_number.split(''); let sum = 0; function cc(num) { let total = num; if (total > 9) { let s = total.toString(); const n1 = s.substring(0, 1) * 1; const n2 = s.substring(1, 2) * 1; total = n1 + n2; } return total; } if (gui_number.length !== 8) { alert('統編錯誤,要有 8 個數字'); return; } cnum.forEach((item, index) => { if (gui_number.charCodeAt() < 48 || gui_number.charCodeAt() > 57) { alert('統編錯誤,要有 8 個 0-9 數字組合'); return; } sum += cc(item * cx[index]); }); if (sum % 10 === 0) { alert('統編正確'); } else if (cnum[6] === '7' && (sum + 1) % 10 === 0) { alert('統編正確2'); } else { alert('統編錯誤'); } }
|
1 2 3 4
| <body> <input type="text" class="gui_number" name="gui_number" maxlength="8"> <input type="button" value="驗證" onclick="check_tax_number()"> </body>
|
驗證範例 - Vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| methods: { check_tax_number() { const vm = this; const cx = [1, 2, 1, 2, 1, 2, 4, 1]; if (vm.receipt_taxnum.length !== 8) { vm.receipt_taxnum_hint = '統編錯誤,要有 8 個數字'; return; } let sum = 0; let cnum = vm.receipt_taxnum.split(''); function cc(num) { let total = num; if (total > 9) { let s = total.toString(); const n1 = s.substring(0, 1) * 1; const n2 = s.substring(1, 2) * 1; total = n1 + n2; } return total; } cnum.forEach((item, index) => { sum += cc(item * cx[index]); if (sum % 10 === 0) { vm.receipt_taxnum_hint = ''; } else if (cnum[6] === '7' && (sum + 1) % 10 === 0) { vm.receipt_taxnum_hint = ''; } else { vm.receipt_taxnum_hint = '統一編號錯誤'; } }); }, }
|
1 2 3
| <input type="tel" placeholder="請輸入統編" minlength="8" maxlength="8" v-model="receipt_taxnum" @input="check_tax_number()"> <span class="text-danger">{{ receipt_taxnum_hint }}</span>
|
結尾
驗證規則不算太複雜,可根據自己的寫法來調整呦,本篇提供兩種寫法供大家參考,感謝各位觀看!!