みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
請求書を発行するときに、問い合わせに対応するために”一応”請求書番号をつけています
この請求書番号について、先月分が00010で、今月が00013、その次が00017
だったら、ある程度の取引先の数が憶測されてしまいます
どのようにするものでしょうか?
UUIDをつかうのも大仰するすぎるし桁数も多く伝達が難しそうです
例えばアマゾンの注文番号ですと
同じ日に買ったものでもまったく違う番号のようです
249-6234001-05414XX
249-2921148-14366XX
249はなにかの符号だとして、ほかはランダムなのでしょうか?
憶測されないような請求書番号の発行は、手っ取り早いのはランダム生成でしょうね。
ランダムでなければ、アマゾンにとって何らかの規則性があったにしても、こちら側からは何の事か分かりません。
結論、推測も憶測も出来ないと言うことになります。
上記のアマゾンの例で言うなら、自分の場合次のようにします。
249を頭に7桁の数値がハイフンで繋がっている…
”249” & "-"
Middle("1234567890", Round(Random * 9, 0)+1, 1)
&
Middle("1234567890", Round(Random * 9, 0)+1, 1)
:
これを7回繰り返す
& "-" &
Middle("1234567890", Round(Random * 9, 0)+1, 1)
&
Middle("1234567890", Round(Random * 9, 0)+1, 1)
:
これを7回繰り返す
249-2138537-5823913 (ランダム7桁のものが2つ生成された)
:
完成!
簡単に言えば、"249" & "-" & ランダム7桁 & "-" & ランダム7桁 で繋げただけ
Offline
7桁なら乱数を7回生成しないでも1つの乱数から7桁取り出せば足りますが...
単純に計算フィールドでやると
被る可能性がありませんか?
><>さん
被る確率は極めて低そうではありますが、0ではないですよね。確か被らせない方法があったのですが思い出せません。
>himadanee
FileMakerは人によって計算方法やステップが異なり色々な手法があります。
吐き捨ててしまうのは簡単ですが代替案でも示してくれれば見てくれている皆さんのためにもなると思います。
「今までこうやっていたけど、こんなやり方もあるんだぁ!?」ってより一層関心が高まると思います。
この掲示板があることによって、創造するための新しいインスピレーションが湧いたり、ひらめきに乏しかったりして困っている時は本当に助かります。
思いやりと優しさを持って、FileMakerライフを楽しんでいきましょう。
Offline
簡単な暗号化を行えばいいですよね。
例えば、3桁の数字を隠す方法として、
乱数の中の別に指定した桁を置き換える、という方法があります。
例として、417223156989 という数字列で 129 という数字を隠しています。生成方法は、123456789という数字列の4桁目、1桁目、7桁目にこの潤で 129を置き換えであります。その位置情報は最初の3桁です。
最初の数字例を乱数で発生させておけば、解読する事は困難でしょう。解読方法を知っている人には、簡単に読み取れます。
Offline
Shinさん
どのように計算したらできますか?
単に桁数を決めた乱数でいいのでは。
複数桁の乱数発生の方法は、
https://fm-aid.com/bbs2/viewtopic.php?id=14605
ここを参考にすればいいでしょう。
重複を恐れるのなら、
スクリプトで、重複しないまで乱数発生を繰り返せばいいでしょう。
Last edited by チポ (2023-09-05 09:03:38)
Offline
そのスレッドの時は数値演算でやってましたが、Right(Random;7)とかでもいいかも。
極まれに文字数が足りないことがあり得るか...
重複と同じでやり直せばいいですが、スクリプトを使わずにWhile関数でできるかな?
>計算フィールドでやると
バックアップからデータを戻す必要が生じたときに再計算されてしまって困るので、計算値自動入力の方がよかったんですが
今はデータを移すツールで再計算させないで入れられるようですね。
> Right(Random;7)
Rightがすごいですね!
桁をいっぱい上げて、Leftで頭の0抜きを取ったことはありましたが、、
Random関数は何桁を返すのでしょう?
Offline
Let (
[
key = While (
[
i = Int ( Random * 1000 ) ;
i = Filter ( i ; "123456789" )
] ;
ValueCount (
UniqueValues (
Substitute (
i ;
[ "1" ; "1¶" ];
[ "2" ; "2¶" ];
[ "3" ; "3¶" ];
[ "4" ; "4¶" ];
[ "5" ; "5¶" ];
[ "6" ; "6¶" ];
[ "7" ; "7¶" ];
[ "8" ; "8¶" ];
[ "9" ; "9¶" ]
)
)
) < 3 ;
[
i = Int ( Random * 1000 ) ;
i = Filter ( i ; "123456789" )
] ;
i
) ;
lst = Int ( Random * 1000000000 ) ;
lst = Replace ( lst ; Left ( key ; 1 ) ; 1 ; Left ( 伝票番号 ; 1 ) );
lst = Replace ( lst ; Middle ( key ; 2 ; 1 ) ; 1 ; Middle ( 伝票番号 ; 2 ; 1 ) );
lst = Replace ( lst ; Middle ( key ; 3 ; 1 ) ; 1 ; Middle ( 伝票番号 ; 3 ; 1 ) )
] ;
key & lst
)重複しない3数字の列を作るのって、意外に難しいですね。
Last edited by Shin (2023-09-05 18:54:00)
Offline
>Random関数は何桁を返すのでしょう?
ヘルプに書いてないですね。
16桁(普通の1/7とかの無限小数だと16桁表示される)だと思ってたけど、FM19で試したら20桁あるみたいですね...
SetPrecision(Random;100)
とかやっても桁数は増えませんね。
ただ
Length(Random)
を見ているとほとんど21(小数点と数字20桁)ですが、たまに22になることがあります。謎...
(20になるのは末尾の0が消えるので10回に1回ぐらいあっても不思議ではないですが)
私も試しましたが同じような結果ですね。
相当以前に、
Randomの計算式を見たことがあって
その時に桁数も書いてあったように思いますが忘れてしまってます。
話が曲がってます、スレ主さんごめんなさい。。
Offline
>重複しない3数字の列を作る
しばらく考えてみたけど、地道に3回乱数を使うぐらいしか思いつきませんでした。
Let([
n = "123456789";
r = Int ( Random * 9 + 1 ) ;
c1 = Middle ( n ; r ; 1 ) ;
n = Substitute ( n ; c1 ; "" ) ;
r = Int ( Random * 8 + 1 ) ;
c2 = Middle ( n ; r ; 1 ) ;
n = Substitute ( n ; c2 ; "" ) ;
r = Int ( Random * 7 + 1 ) ;
c3 = Middle ( n ; r ; 1 )
];
c1 & c2 & c3
)
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 591.67 KiB (Peak: 608.58 KiB) ]