/*
* 項 目 計 算 方 法 說 明
統一編號 0 4 5 9 5 2 5 7
邏輯乘數 1 2 1 2 1 2 4 1 兩數上下對應相乘
乘 積 0 8 5 1 5 4 2 7
0 0 0 8 0 0 0 0 乘積直寫並上下相加
--------------------------------------------
乘積之和 0 8 5 9 5 4 2 7 將相加之和再相加
0+8+5+9+5+4+2+7=40 正確!
最後結果, 40 能被 10 整除, 故 04595257 符合邏輯。
*若第七位數字為 7 時
統一編號 1 0 4 5 8 5 7 5 倒數號二位為 7
邏輯乘數 1 2 1 2 1 2 4 1 兩數上下對應相乘
乘 積 1 0 4 1 8 1 2 5
0 0 0 0 0 0 8 0 乘積直寫並上下相加
---------------------------------------------
乘積之和 1 0 4 1 8 1 1 5
0 再相加時最後第二位數取 0 或 1 均可。
1+0+4+1+8+1+1+5=21
1+0+4+1+8+1+0+5=20 正確!
最後結果中, 20 能被 10 整除, 故 10458575 符合邏輯。
public static bool checkCompanyID(string sCompanyID)
{
try
{
//傳入公司統編長度不等於8就return
if(sCompanyID.Length != 8)
return false;
int aSum = 0;
//公司統編邏輯乘數( 1, 2, 1, 2, 1, 2, 4, 1 )
int[] LogicCompanyID = {1, 2, 1, 2, 1, 2, 4, 1};
for(int i = 0 ; i < LogicCompanyID.Length ; i++)
{
//公司統編與邏輯乘數相乘
int aMultiply = Convert.ToInt32(sCompanyID.Substring(i,1)) * LogicCompanyID[i];
//將相乘的結果, 取十位數及個位數相加
int aAddition = ((aMultiply / 10) + (aMultiply % 10));
//如果公司統編的第 7 位是 7 時, 會造成相加結果為 10 的特殊情況, 所以直接以 0 代替進行加總
aSum += (aAddition == 10)?0:aAddition;
}
//判斷總和的餘數, 假使為 0 公司統編正確回傳 true, 其它值則反之.
return (aSum % 10 == 0);
}
catch
{
return false;
}
例外狀況: 70664079
沒有留言:
張貼留言