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

更新於 2024/06/22閱讀時間約 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

這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
討論系統架構時,我們常忽略低流量時期的準備,但真正的挑戰在於怎樣在突發高流量時保持穩定。我們深入探討了如何透過水平擴展、負載均衡、快取策略等多維度規劃,來強化系統對高流量的承受力,確保系統的靈活擴展與高可用性。
在連假期間,我探索了「知識詛咒」這個話題,揭露了專家在分享知識時常見的盲點。提出了三大觀點來應對:情境導入,讓知識有著落;探討不同情境下可能的結果,展現靈活思考;並且至少提供兩種例證,增強說服力。這篇分享不僅是自我反思的成果,也希望能給大家在溝通和知識分享上一些新的啟示。
放鬆的週末,我與幾位同事決定提升我們的後端開發技巧,選擇了「日期範圍生成器」作為我們的小型實作。作為團隊中較有經驗的PHP工程師,我引領著團隊從基礎程式碼的撰寫開始,進而深入到物件導向的結構調整,最後提高程式可擴充性的挑戰。雖然過程中遇到不少困難,但我們通過不斷的討論和優化,最終成功克服了所有挑戰。
在程式世界裡,if 條件句是我們的好朋友,幫我們做各種決策。如果不注意可能會讓我們掉進小陷阱。文中透過幾個例子,在使用 if 時可能會遇到的一些常見問題,像是不必要的 if、過於複雜的條件、忘了用嚴格比較,還有嵌套太深的 if。透過這篇文章,你將學到如何避免這些小錯誤,寫出更乾淨、更有效率的程式碼。
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
討論系統架構時,我們常忽略低流量時期的準備,但真正的挑戰在於怎樣在突發高流量時保持穩定。我們深入探討了如何透過水平擴展、負載均衡、快取策略等多維度規劃,來強化系統對高流量的承受力,確保系統的靈活擴展與高可用性。
在連假期間,我探索了「知識詛咒」這個話題,揭露了專家在分享知識時常見的盲點。提出了三大觀點來應對:情境導入,讓知識有著落;探討不同情境下可能的結果,展現靈活思考;並且至少提供兩種例證,增強說服力。這篇分享不僅是自我反思的成果,也希望能給大家在溝通和知識分享上一些新的啟示。
放鬆的週末,我與幾位同事決定提升我們的後端開發技巧,選擇了「日期範圍生成器」作為我們的小型實作。作為團隊中較有經驗的PHP工程師,我引領著團隊從基礎程式碼的撰寫開始,進而深入到物件導向的結構調整,最後提高程式可擴充性的挑戰。雖然過程中遇到不少困難,但我們通過不斷的討論和優化,最終成功克服了所有挑戰。
在程式世界裡,if 條件句是我們的好朋友,幫我們做各種決策。如果不注意可能會讓我們掉進小陷阱。文中透過幾個例子,在使用 if 時可能會遇到的一些常見問題,像是不必要的 if、過於複雜的條件、忘了用嚴格比較,還有嵌套太深的 if。透過這篇文章,你將學到如何避免這些小錯誤,寫出更乾淨、更有效率的程式碼。
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
品牌經營對於公司或個人來說變得越來越重要。品牌定位、必修本領和行銷溝通都有其獨特的價值。品牌經營的目標是建立和維護品牌形象,通過定位、故事和價值觀與消費者產生共鳴。
營利事業登記是指將一個企業或公司在法律上納入商業登記系統的過程。通過營利事業登記,企業可以合法地從事商業活動,並享有相應的權利和責任。
Thumbnail
可能包含敏感內容
本文整理了營利事業捐贈運動產業的方式、對象、租稅優惠及注意事項,並介紹了教育部專戶捐贈運動產業的相關政策及最新捐贈名單。這些措施將有助於推動相關業餘運動的職業化進程,並提供營所稅費用扣除的租稅優惠。
Thumbnail
財政部業於上週 12 月 21 日及 22 日分別公告了修正後之「營利事業認列受控外國企業所得適用辦法」及「個人計算受控外國企業所得適用辦法」,此版本將會是明年 5 月份辦理CFC申報之法令依據。本次修正內容的最大重點莫過於增訂了「非低稅負地區分配 111 年及以前年度盈餘,得免計入當年度盈餘之過渡
Thumbnail
文、圖/十分好創意提供   資深公關經理人楊忠翰與黃鼎翎,繼「十分好創意」後再成立社會企業「黃加藍共益事業有限公司」,正式完成了在經濟部社會創新平台的登記,期望加速協助NPO/NGO非營利組織的對外專業溝通力與整合力,強化對企業、政府等多元利害關係人的溝通,以強化更多社會資源的挹注;同時也協助
Thumbnail
營利事業認列受控外國企業所得適用辦法(以下簡稱法人CFC辦法)於 106 年 9 月 22 日訂定發布,並於 112 年度施行,距筆者撰文當下已經過了 9 個多月。在此期間,各界也陸續向財政部反映了許多實務上的問題及建議,於是財政在中秋節前夕(9月28日)發佈了最新的法人CFC辦法之修正草案。接下來
https://www.chinatimes.com/newspapers/20231106000217-260207 AI浪潮來襲,第一波換代產品為伺服器,之後將導入終端裝置,市場必將焦點集中在組裝代工或IC設計身上。然不論雲端或邊緣裝置,都必須通過檢測標準,通訊檢測廠耕興鴨子划水,於AI暨5G
Thumbnail
前言: 營利事業所得稅是每一家台灣企業都無法避免的一種稅目,但核課營所稅的課稅所得額如何決定,經常讓許多人感到困惑。而課稅所得額之計算又會跟營利事業所選擇的申報方式有關,因此,掌握營利事業所得稅的申報方式是非常重要的。在本文中,我將詳細介紹營利事業所得稅的兩大類型與三大申報方法,以及各種方式的優缺點
Thumbnail
不管是什麼樣的關係,「信任財」都是一個非常需要去重視的東西。信任財是最難累積,同時消耗了也再也回不來的東西。 當他們因為玩家暴增而讓原本玩家排不進遊戲裡時,他們採取的作法是,為了跟老玩家道歉免費給玩家兩週的遊戲時間,並且「暫時停止販賣遊戲」。你說這種跟錢過不去的各種決議,到底是在做什麼?
Thumbnail
來介紹一下公司稅中的營利事業所得稅申報程式 在申報軟體下載營所稅專區內有六大類 營所稅結(決)算 營所稅機關團體 營所稅清算 營所稅帳簿上傳 營所稅暫繳 國別報告及集團主檔報告送交
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
品牌經營對於公司或個人來說變得越來越重要。品牌定位、必修本領和行銷溝通都有其獨特的價值。品牌經營的目標是建立和維護品牌形象,通過定位、故事和價值觀與消費者產生共鳴。
營利事業登記是指將一個企業或公司在法律上納入商業登記系統的過程。通過營利事業登記,企業可以合法地從事商業活動,並享有相應的權利和責任。
Thumbnail
可能包含敏感內容
本文整理了營利事業捐贈運動產業的方式、對象、租稅優惠及注意事項,並介紹了教育部專戶捐贈運動產業的相關政策及最新捐贈名單。這些措施將有助於推動相關業餘運動的職業化進程,並提供營所稅費用扣除的租稅優惠。
Thumbnail
財政部業於上週 12 月 21 日及 22 日分別公告了修正後之「營利事業認列受控外國企業所得適用辦法」及「個人計算受控外國企業所得適用辦法」,此版本將會是明年 5 月份辦理CFC申報之法令依據。本次修正內容的最大重點莫過於增訂了「非低稅負地區分配 111 年及以前年度盈餘,得免計入當年度盈餘之過渡
Thumbnail
文、圖/十分好創意提供   資深公關經理人楊忠翰與黃鼎翎,繼「十分好創意」後再成立社會企業「黃加藍共益事業有限公司」,正式完成了在經濟部社會創新平台的登記,期望加速協助NPO/NGO非營利組織的對外專業溝通力與整合力,強化對企業、政府等多元利害關係人的溝通,以強化更多社會資源的挹注;同時也協助
Thumbnail
營利事業認列受控外國企業所得適用辦法(以下簡稱法人CFC辦法)於 106 年 9 月 22 日訂定發布,並於 112 年度施行,距筆者撰文當下已經過了 9 個多月。在此期間,各界也陸續向財政部反映了許多實務上的問題及建議,於是財政在中秋節前夕(9月28日)發佈了最新的法人CFC辦法之修正草案。接下來
https://www.chinatimes.com/newspapers/20231106000217-260207 AI浪潮來襲,第一波換代產品為伺服器,之後將導入終端裝置,市場必將焦點集中在組裝代工或IC設計身上。然不論雲端或邊緣裝置,都必須通過檢測標準,通訊檢測廠耕興鴨子划水,於AI暨5G
Thumbnail
前言: 營利事業所得稅是每一家台灣企業都無法避免的一種稅目,但核課營所稅的課稅所得額如何決定,經常讓許多人感到困惑。而課稅所得額之計算又會跟營利事業所選擇的申報方式有關,因此,掌握營利事業所得稅的申報方式是非常重要的。在本文中,我將詳細介紹營利事業所得稅的兩大類型與三大申報方法,以及各種方式的優缺點
Thumbnail
不管是什麼樣的關係,「信任財」都是一個非常需要去重視的東西。信任財是最難累積,同時消耗了也再也回不來的東西。 當他們因為玩家暴增而讓原本玩家排不進遊戲裡時,他們採取的作法是,為了跟老玩家道歉免費給玩家兩週的遊戲時間,並且「暫時停止販賣遊戲」。你說這種跟錢過不去的各種決議,到底是在做什麼?
Thumbnail
來介紹一下公司稅中的營利事業所得稅申報程式 在申報軟體下載營所稅專區內有六大類 營所稅結(決)算 營所稅機關團體 營所稅清算 營所稅帳簿上傳 營所稅暫繳 國別報告及集團主檔報告送交