營利事業統一編號怎麼會驗證錯誤!?

更新於 發佈於 閱讀時間約 5 分鐘

故事要從上禮拜說起。原本我們在趕一個重要專案,也因為這個專案讓我好幾個禮拜沒辦法抽空寫文章(抱怨一下),結果我接到一位同事的詢問。他說供應商使用我們的API時出現了統一編號驗證錯誤。


這位同事James,他一臉困惑地走進來,手裡拿著一疊文件。他說:「R,你能幫我看看這個嗎?我們的供應商在使用API時,系統一直顯示統一編號驗證錯誤。」我放下手中的工作,仔細查看問題。James接著說:「我們的有問題的系統是Laravel框架。

我查了幾遍程式碼,邏輯看起來沒問題啊,為什麼會驗證失敗?」一開始,我也感到一頭霧水。這個檢查程式我們已經用了很久,之前從來沒有出過這種問題。我決定跟James一起深入調查,找出問題的根源。


首先,我們重新跑過一遍相關的單元測試。然後,我們回顧了檢查邏輯,確定Git的主分支沒有相關的改動過。然而,所有的檢查都顯示程式碼應該是正確的,但為什麼會出現錯誤呢?

private function isValidChecksum(int $sum): bool
{
return ($sum - round($sum / 10) * 10) == 0;
}

我們把目光轉向了最近的公告。沒錯,就是那則財政部關於統一編號檢查程式邏輯更改的公告。新的規則要求統一編號從「可被10整除」改為「可被5整除」。我恍然大悟,這應該就是問題的癥結點!


「James,我們的檢查邏輯需要更新了!」我說。「根據財政部的公告,現在的統一編號檢查邏輯改成可被5整除,我們的程式還在用舊的檢查規則。」


我們馬上開始修改程式碼,將檢查邏輯從「可被10整除」改為「可被5整除」。更新後,並且把供應商提供的統一編號加入單元測試的檢查點,我們重新測試了系統,這次供應商的統一編號終於通過了驗證。

private function isValidChecksum(int $sum): bool
{
return ($sum - round($sum / 5) * 5) == 0;
}

這個小插曲提醒我們,即使是看似不起眼的規則變更,也會對系統造成重大影響。幸好我們及時發現並修正了錯誤,讓專案得以順利進行。在解開這個謎團後,我不禁感嘆,技術的世界總是充滿挑戰,但這正是讓我們成長和進步的動力。現在,我終於可以安心地繼續趕專案,期待下次再跟大家分享更多的故事。


後記:這次把驗證段特別提取出來,在單元測試的驗證上再補上不足的地方,以下為完整的程式碼。

<?php

class InvoiceValidator
{
/**
* 檢查發票號碼是否合法
*
* @param string $invoiceId 發票號碼
* @return bool
*/
public function chkInvoiceId(string $invoiceId): bool
{
$checkKey = [1, 2, 1, 2, 1, 2, 4, 1];
$isum = 0;

// 計算加權和
for ($i = 0; $i < 8; $i++) {
$currentDigit = (int)substr($invoiceId, $i, 1);
$product = $checkKey[$i] * $currentDigit;
$a = (int)substr($product, 0, 1);
$b = (int)substr($product, 1, 1) ?: 0;

if ($i == 6 && substr($invoiceId, -2, 1) == '7') {
$isum1 = $isum + 1;
$isum2 = $isum;
} else {
$isum += $a + $b;
}
}

// 處理發票號碼倒數第二位為7的情況
if (substr($invoiceId, -2, 1) == '7') {
$isum1 += $a + $b;
$isum2 += $a + $b;
return $this->isValidChecksum($isum1) || $this->isValidChecksum($isum2);
}

// 檢查加權和的驗證碼
return $this->isValidChecksum($isum);
}

/**
* 檢查加權和的驗證碼
*
* @param int $sum 加權和
* @return bool
*/
private function isValidChecksum(int $sum): bool
{
return ($sum - round($sum / 5) * 5) == 0;
}
}


參考來源:

(營利事業統一編號檢查碼邏輯修正說明) https://www.fia.gov.tw/singlehtml/3?cntId=c4d9cff38c8642ef8872774ee9987283

留言
avatar-img
留言分享你的想法!
avatar-img
詹姆士的軟體易開罐
25會員
77內容數
這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
2025/01/14
「如果資料庫出問題,能不能快速恢復?」 這或許是許多工程師在面對資料庫維運時心中的疑問。就我而言,遇到伺服器故障或有人誤刪資料表時,最慶幸的就是事先做好備份。這次要分享的是 MySQL 中常用的備份指令 mysqldump,讓大家能在需要時把握關鍵的「救命繩」。 為什麼需要備份? 在商業專案
Thumbnail
2025/01/14
「如果資料庫出問題,能不能快速恢復?」 這或許是許多工程師在面對資料庫維運時心中的疑問。就我而言,遇到伺服器故障或有人誤刪資料表時,最慶幸的就是事先做好備份。這次要分享的是 MySQL 中常用的備份指令 mysqldump,讓大家能在需要時把握關鍵的「救命繩」。 為什麼需要備份? 在商業專案
Thumbnail
2024/08/25
這篇文章反映了平台改版後使用者面臨的多項問題,包括文章編輯功能異常、分類顯示異常及最新內容資料呈現問題。本人從個人經驗出發,詳細描述了這些問題的具體情況,期望官方重視使用者反饋,以改善平台使用體驗。
2024/08/25
這篇文章反映了平台改版後使用者面臨的多項問題,包括文章編輯功能異常、分類顯示異常及最新內容資料呈現問題。本人從個人經驗出發,詳細描述了這些問題的具體情況,期望官方重視使用者反饋,以改善平台使用體驗。
2024/07/20
2024年7月19日…,一場前所未有的全球性大事件悄然降臨。這次事件波及了機場、車站,以及無數依賴關鍵系統的商店與公司。聽起來像是科幻小說中的場景,然而,這真真切切地發生在昨天。世界各地的運營陷入混亂,人們的生活被突如其來的技術故障打亂。 這一切都要從一間公司開始說起——CrowdStrike
Thumbnail
2024/07/20
2024年7月19日…,一場前所未有的全球性大事件悄然降臨。這次事件波及了機場、車站,以及無數依賴關鍵系統的商店與公司。聽起來像是科幻小說中的場景,然而,這真真切切地發生在昨天。世界各地的運營陷入混亂,人們的生活被突如其來的技術故障打亂。 這一切都要從一間公司開始說起——CrowdStrike
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
想發簡訊給自己經營的電商會員時,可以直接用大量簡訊平台一次發送。 但目前因為詐騙簡訊"盛行"的關係,申請這類平台的規則也變嚴格了,連自己的個資也要上繳給這些平台做身份驗證,所以還是找一些安全、有信譽的廠商,免得把自己的個資賣掉外,自己會員的個資也賣了。
Thumbnail
想發簡訊給自己經營的電商會員時,可以直接用大量簡訊平台一次發送。 但目前因為詐騙簡訊"盛行"的關係,申請這類平台的規則也變嚴格了,連自己的個資也要上繳給這些平台做身份驗證,所以還是找一些安全、有信譽的廠商,免得把自己的個資賣掉外,自己會員的個資也賣了。
Thumbnail
本文介紹如何對 Telegram 憑證監控機器人的代碼進行優化,包括新增指令、讀取變數、提高可讀性和可維護性。
Thumbnail
本文介紹如何對 Telegram 憑證監控機器人的代碼進行優化,包括新增指令、讀取變數、提高可讀性和可維護性。
Thumbnail
為什麼供應商在使用我們的API時,統一編號驗證會出錯?這個看似簡單的錯誤,竟然牽涉到財政部的新規則。我們如何發現並解決這個問題?新的檢查邏輯是如何影響我們的系統?本文將揭示背後的原因和解決過程。
Thumbnail
為什麼供應商在使用我們的API時,統一編號驗證會出錯?這個看似簡單的錯誤,竟然牽涉到財政部的新規則。我們如何發現並解決這個問題?新的檢查邏輯是如何影響我們的系統?本文將揭示背後的原因和解決過程。
Thumbnail
【駭入別人銷售漏斗,模仿驗證有效流程】
Thumbnail
【駭入別人銷售漏斗,模仿驗證有效流程】
Thumbnail
這篇文章探討了在軟體開發中的技術債可能來自哪些原因,以及如何自動化偵測與修復技術債。作者透過分享不同情境下的技術債選擇,提供了對於技術債的思考與建議,針對開發人員在需要做出無奈的技術決策時,提供了一些建議。此外,還提供了一些在做出技術決策時的方法,如保留抽象層和避免vendor lock-in。
Thumbnail
這篇文章探討了在軟體開發中的技術債可能來自哪些原因,以及如何自動化偵測與修復技術債。作者透過分享不同情境下的技術債選擇,提供了對於技術債的思考與建議,針對開發人員在需要做出無奈的技術決策時,提供了一些建議。此外,還提供了一些在做出技術決策時的方法,如保留抽象層和避免vendor lock-in。
Thumbnail
每日自動檢查資料庫運作所產生的訊息,若發現有錯誤,自動寄出警告信給擔當人員
Thumbnail
每日自動檢查資料庫運作所產生的訊息,若發現有錯誤,自動寄出警告信給擔當人員
Thumbnail
利用總機每日外線通話紀錄所產出之紀錄檔案,一筆一筆抓出,並加以判斷是否異常,若有意常發生,將擷取該筆異常資料明細出力之,並email給相關管理者
Thumbnail
利用總機每日外線通話紀錄所產出之紀錄檔案,一筆一筆抓出,並加以判斷是否異常,若有意常發生,將擷取該筆異常資料明細出力之,並email給相關管理者
Thumbnail
從2024年最新的信用卡修正條例,看見「一開始只是為保護人民而設置限制,最後限制卻反過來要求人民該怎麼做。」時,其道理竟然也可以延伸至死刑。
Thumbnail
從2024年最新的信用卡修正條例,看見「一開始只是為保護人民而設置限制,最後限制卻反過來要求人民該怎麼做。」時,其道理竟然也可以延伸至死刑。
Thumbnail
金融業需遵守金檢規則,建立API分級協助和管理程序確保API合規,使用OAuth 2.0和API KEY授權功能降低風險,實行API認證和金鑰機制保障資料安全。監控API使用,建立控制機制,選擇優良的APIM,提供全面的API管理和安全。
Thumbnail
金融業需遵守金檢規則,建立API分級協助和管理程序確保API合規,使用OAuth 2.0和API KEY授權功能降低風險,實行API認證和金鑰機制保障資料安全。監控API使用,建立控制機制,選擇優良的APIM,提供全面的API管理和安全。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News