統一編號驗證實做 DIY

355

上次我們提到統一編號的困擾,既然我們找到了方法,那今天不妨就使用 Filemaker來實做一下


首先你要先把他的驗證規則看幾次(當然你看一次就懂的話,就看一次吧!
(一) 長度:共八位,,全部為數字型態。
(二) 計算公式
1、各數字分別乘以 1,2,1,2,1,2,4,1。
2、公式如下:
D1 D2 D3 D4 D5 D6 D7 D8
* 1 2 1 2 1 2 4 1 (第一列 * 第二列)
A1 B1 A2 B2 A3 B3 A4 B4 (Bx:相乘後的十位數)
+ C1 C2 C3 C4 (Cx:相乘後的個位數)
X1 X2 X3 X4 X5 X6 X7 X8 (Xx:相加後的十位數)
Y7 (Yx:相加後的個位數)
Z1= X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8 或
Z1= X1 + X2 + X3 + X4 + X5 + X6 + Y7 + X8
3、當第 7 位數為 7 者,可取相加之倒數第二位取 0 及 1 來計算如 Z1 及 Z2 計算其和。
4、假如 Z1 或 Z2 能被 10 整除,則表示營利事業統一編號正確。
(三) 範例 ( 以 0 0 2 3 8 7 7 8 為例 )
0 0 2 3 8 7 7 8
* 1 2 1 2 1 2 4 1 (第一列 * 第二列)
0 0 2 6 8 1 2 8 (Bx:相乘後的十位數)
+ 4 8 (Cx:相乘後的個位數)
0 0 2 6 8 5 1 8 (Xx:相加後的十位數)
0 (Yx:相加後的個位數)
Z1= 0+ 0+ 2+ 6+ 8+ 5+ 1+ 8 = 30 或
Z2= 0+ 0+ 2+ 6+ 8+ 5+ 0+ 8 = 29
因 30 能被 10 整除,故營利事利統一編號正確。

以上就是公式,花了多久時間看完?
沒關係,看多久不是問題,看不懂才是問題
接下來,麻煩打開FileMaker,我們直接寫一條 Script ,把這些公式寫入,然後進行驗證
至於怎麼寫,怎麼弄到 Field 去做觸發性,這裡不是重點,如果您還不會,勞煩去找教學資源
 354
$parsed 的內容則如下,拷貝回去貼就好了
Let ([
       ~no                = data::unified number ;
       ~no                = If ( IsEmpty ( ~no ) ; “null” ; ~no ) ;
       ~no.format = If ( IsEmpty ( Filter ( ~no ; “0123456789” ) ) ; “null” ; ~no ) ;//過濾掉非數字
       ~no.null       = ~no.format ≠ “null” ;
       ~no.digi8    = Length ( ~no.format ) ≠ 8 ;
//——————————————————-
       ~no.formula = Let ([
                           n1 = Middle ( ~no.format ; 1 ; 1 ) * 1 ;
                           n3 = Middle ( ~no.format ; 1 ; 3 ) * 1 ;
                           n5 = Middle ( ~no.format ; 1 ; 5 ) * 1 ;
                           n8 = Middle ( ~no.format ; 1 ; 8 ) * 1 ;
                           n2 = Middle ( ~no.format ; 2 ; 1 ) * 2 ;
                           n4 = Middle ( ~no.format ; 4 ; 1 ) * 2 ;
                           n6 = Middle ( ~no.format ; 6 ; 1 ) * 2 ;
                           n7 = Middle ( ~no.format ; 7 ; 1 ) * 4 ;
                           m2 = Int (n2 / 10 ) + Mod ( n2 ; 10 ) ;
                           m4 = Int (n4 / 10 ) + Mod ( n4 ; 10 ) ;
                           m6 = Int (n6 / 10 ) + Mod ( n6 ; 10 ) ;
                           m7 = Int (n7 / 10 ) + Mod ( n7 ; 10 ) ;
                           x1 = n1 + n3 + n5 + n8 ;
                           x2 = m2 + m4 + m6 + m7 ;
                           $no.formula1 = x1 + x2 ;
                           $no.formula2 = x1 + x2 – m7 + Int(m7/10) ;
                           ~result = 1
                         ];
                           ~result
                      );
       ~no.check1 = Mod ( $no.formula1 ; 10 ) ; // = 0合法編號
       ~no.check2 = Middle ( ~no.format ; 7 ; 1 ) ; // = 7當第 7 位數為 7 者
       ~no.check3 = Mod ( $no.formula2 ; 10 ) ; // = 0合法編號
       $error1 = ~no.null and ~no.digi8 ;
       $error2 = ~no.check1 ≠ 0 and ~no.check2 ≠ 7 ;
       $error3 = ~no.check1 ≠ 0 and ~no.check2 = 7 and ~no.check3 ≠ 0 ;
//——————————————————-
       $alarm = Case (
                       $error1 ; “統一編號為八碼阿拉伯數字,請先查詢確認” ;
                       $error2 ; “統一編號錯誤,請先查詢確認” ;
                       $error3 ; “統一編號錯誤,請先查詢確認”
                     );
       ~result = 1
     ];
       ~result
 )
先做看看,如果沒辦法成功的話,可以給我來信
我有空會把檔案寄給你

Tags: , , , , , , , ,

No comments yet.

Leave a Reply