2023年版營利事業統一編號檢查規則:C#程式碼
接續上一篇的規則,順手寫了新版統一編號驗證的程式碼,採用的是C# + LINQ語法,初步看起來沒有運作正常,若有後續的問題再請來信回報。
新版統一編號驗證程式碼
請注意這是新版的規則喔,舊版的規則請自行將% 5
改回% 10
,不過我想時至今日應該沒有這個需求了吧,程式碼如下:
public static (bool bIsError, string cMessage) CheckTaxID(string cTax)
{ //回傳結果集
var oResult = (bIsError: false, cMessage: "統一編號格式合法");
//邏輯乘數(財政部制定)
var cMagic = "12121241";
try
{
if (string.IsNullOrEmpty(cTax) || cTax.Length != 8 || !int.TryParse(cTax, out int iUnused))
{ throw new System.Exception("請輸入八位數純數字"); }
//轉成數值陣列
var aryTax = cTax.ToCharArray().Select(x => (int)(x - '0')).ToArray();
var aryMagic = cMagic.ToCharArray().Select(x => (int)(x - '0')).ToArray();
//運算乘積
var aryResult = new int[8];
for (int i = 0; i < aryTax.Length; i++)
{ aryResult[i] = aryTax[i] * aryMagic[i]; }
//運算整理:大於10就進行位數相加
aryResult = aryResult.Select(x => x < 10 ? x : x.ToString().ToCharArray().Select(y => (int)(y - '0')).Sum()).ToArray();
//運算整理:第七位數大於10之分拆
var oList = new System.Collections.Generic.List<int[]>();
foreach (var cItem in aryResult[6].ToString().ToCharArray())
{
var aryTemp = aryResult.ToArray();
aryTemp[6] = (int)(cItem - '0');
oList.Add(aryTemp);
}
//運算整理:乘積和與除5判斷
if (!oList.Select(x => x.Sum()).Select(x => x % 5 == 0).Any(x => x))
{ throw new System.Exception("統一編號格式不合法"); }
}
catch (System.Exception oEx)
{
oResult.bIsError = true;
oResult.cMessage = oEx.Message;
}
return oResult;
}
驗證統一編號
直接在main()區塊中順手亂打了幾組編號,看起來沒有甚麼問題:
public static void Main()
{ //04595257;合法性:True / 訊息:統一編號格式合法
var cTax = "04595257";
var oResult = CheckTaxID(cTax);
WriteLine($"{cTax};合法性:{!oResult.bIsError} / 訊息:{oResult.cMessage}");
//04595252;合法性:True / 訊息:統一編號格式合法
cTax = "04595252";
oResult = CheckTaxID(cTax);
WriteLine($"{cTax};合法性:{!oResult.bIsError} / 訊息:{oResult.cMessage}");
//10458575;合法性:True / 訊息:統一編號格式合法
cTax = "10458575";
oResult = CheckTaxID(cTax);
WriteLine($"{cTax};合法性:{!oResult.bIsError} / 訊息:{oResult.cMessage}");
//10458574;合法性:True / 訊息:統一編號格式合法
cTax = "10458574";
oResult = CheckTaxID(cTax);
WriteLine($"{cTax};合法性:{!oResult.bIsError} / 訊息:{oResult.cMessage}");
//10458570;合法性:True / 訊息:統一編號格式合法
cTax = "10458570";
oResult = CheckTaxID(cTax);
WriteLine($"{cTax};合法性:{!oResult.bIsError} / 訊息:{oResult.cMessage}");
//22099131;合法性:True / 訊息:統一編號格式合法
cTax = "22099131"; //台積電
oResult = CheckTaxID(cTax);
WriteLine($"{cTax};合法性:{!oResult.bIsError} / 訊息:{oResult.cMessage}");
//08878978;合法性:True / 訊息:統一編號格式合法
cTax = "08878978"; //亂打:舊版錯誤、新版正確
oResult = CheckTaxID(cTax);
WriteLine($"{cTax};合法性:{!oResult.bIsError} / 訊息:{oResult.cMessage}");
//10458573;合法性:False / 訊息:統一編號格式不合法
cTax = "10458573"; //亂打:舊版錯誤、新版錯誤
oResult = CheckTaxID(cTax);
WriteLine($"{cTax};合法性:{!oResult.bIsError} / 訊息:{oResult.cMessage}");
}