統一編號檢查方法
(擴增統一編號-預計112年4月1日啟用)
統編這是第三次改版重寫,
也做了好幾次的修改。
檢查方法的規則,這邊就先省略了。
重點是「擴增統一編號」這一版,
統編第七碼,如果是「7」,
最後可以用「1」或「0」。
然後,如果
[加總] + [第七碼1] 的尾數等於 0 或 5,
或是
[加總] + [第七碼2] 的尾數等於 0 或 5,
表示統編的編碼是符合規則的。
,'第七碼'=Substring([統編],7,1) /* 統編第七碼等於「7」是特例,有兩種判斷方式。 */
,'加總'=
/* 加總第 1、3、5、8 碼 乘以 邏輯乘數「1」乘積。 */
CONVERT(INT,Substring([統編],1,1))*1 +
CONVERT(INT,Substring([統編],3,1))*1 +
CONVERT(INT,Substring([統編],5,1))*1 +
CONVERT(INT,Substring([統編],8,1))*1 +
/* 加總第 2、4、6 碼 乘以 邏輯乘數「2」乘積直寫並上下相加之合。 */
CASE Substring([統編],2,1) WHEN 0 THEN 0
ELSE CONVERT(INT,Substring('246813579', CONVERT(INT,Substring([統編],2,1)) ,1)) END +
CASE Substring([統編],4,1) WHEN 0 THEN 0
ELSE CONVERT(INT,Substring('246813579', CONVERT(INT,Substring([統編],4,1)) ,1)) END +
CASE Substring([統編],6,1) WHEN 0 THEN 0
ELSE CONVERT(INT,Substring('246813579', CONVERT(INT,Substring([統編],6,1)) ,1)) END
,'第七碼1'=CONVERT(INT,
CASE Substring([統編],7,1)
WHEN 1 THEN 4 /* 1 * 4 = 4 */
WHEN 2 THEN 8 /* 2 * 4 = 8 */
WHEN 3 THEN 3 /* 3 * 4 = 12 > 1 + 2 = 3 */
WHEN 4 THEN 7 /* 4 * 4 = 16 > 1 + 6 = 7 */
WHEN 5 THEN 2 /* 5 * 4 = 20 > 2 + 0 = 2 */
WHEN 6 THEN 6 /* 6 * 4 = 24 > 2 + 4 = 6 */
WHEN 7 THEN 0 /* 7 * 4 = 28 > 2 + 8 = 10 > 用 1 或 0 。 這邊用 0 */
WHEN 8 THEN 5 /* 8 * 4 = 32 > 3 + 2 = 5 */
WHEN 9 THEN 9 /* 9 * 4 = 36 > 3 + 6 = 9 */
WHEN 0 THEN 0 /* 0 * 4 = 0 */ END )
,'第七碼2'= /* 說明: 第七碼 * 4 的乘積,再垂直相加。對應1~9 */
CASE Substring([統編],7,1) /* │ 利用 Substring 取指定值的規則,當第七碼是 2 時,就取得 8。 */
WHEN 0 THEN 0 /* ↓ ↓ */
ELSE CONVERT(INT,Substring('483726159', CONVERT(INT,Substring([統編],7,1)) ,1)) END
FROM [申報檔]
然後上面這邊我是捨棄部分的計算式, 反正乘積結果是固定的, 只要用 Substring 函數的規則特性, 將數字對應到乘積直寫上下相加的結果就好了。
沒有留言:
張貼留言