みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
7桁の伝票番号のチェックデジットを求める計算式が下記の通りです。
=CHOOSE(MOD(SUMPRODUCT(MID(TEXT(B19,"0000000"),{1,2,3,4,5,6,7},1)*{2,7,6,5,4,3,2}),11)+1,0,0,9,8,7,6,5,4,3,2,1)
※B19が7桁の伝票番号です
※ちなみに1111111の伝票番号を入力した場合、チェックデジットは4で計算されます。
ファイルメーカーでは計算式をどのようにすればよいか、ご教授よろしくお願いいたします。
Win10 FMP16を使用しています。
ベタで書くと、
Let (
[
se = B!9 ;
wt = List ( 2;7;6;5;4;3;2 ) ;
ss = Mod ( Div ( se ; 10 ^ 6 ) ; 10 ) * GetValue ( wt ; 1 )
+ Mod ( Div ( se ; 10 ^ 5 ) ; 10 ) * GetValue ( wt ; 2 )
+ Mod ( Div ( se ; 10 ^ 4 ) ; 10 ) * GetValue ( wt ; 3 )
+ Mod ( Div ( se ; 10 ^ 3 ) ; 10 ) * GetValue ( wt ; 4 )
+ Mod ( Div ( se ; 10 ^ 2 ) ; 10 ) * GetValue ( wt ; 5 )
+ Mod ( Div ( se ; 10 ^ 1 ) ; 10 ) * GetValue ( wt ; 6 )
+ Mod ( Div ( se ; 10 ^ 0 ) ; 10 ) * GetValue ( wt ; 7 )
] ;
Choose ( Mod ( ss ; 11 ) ; 0;0;9;8;7;6;5;4;3;2;1)
)珍しいウェイトですね。
Last edited by Shin (2019-02-24 18:25:45)
Offline
桁数に依存しない様に書くと(ウェイトの設定による制限あり)
Let (
[
$se = B19 ;
$wt = List ( 2;7;6;5;4;3;2 ) ;
$cs = 0 ;
$fnc = "Case (
IsEmpty ( $se ) ; $cs ;
Let (
[
$cs = $cs + Right ( $se ; 1 ) * RightValues ( $wt ; 1 ) ;
$se = Left ( $se ; Length ( $se ) - 1 ) ;
$wt = LeftValues ( $wt ; ValueCount ( $wt ) - 1 )
] ;
Evaluate ( $fnc )
)
)"
] ;
Mod ( Mod ( 11 - Evaluate ( $fnc ) ; 11 ) ; 10 )
)Last edited by Shin (2019-02-25 08:45:21)
Offline
Shinさん早速の回答ありがとうございます。
当方の頭では一日かけても解決しませんでした。
無事に計算するようになりました。
今後も宜しくお願いいたします。
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 549.63 KiB (Peak: 581.73 KiB) ]