初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2023-09-04 18:54:18

<>
Guest

憶測されない請求書番号の作り方

請求書を発行するときに、問い合わせに対応するために”一応”請求書番号をつけています

この請求書番号について、先月分が00010で、今月が00013、その次が00017
だったら、ある程度の取引先の数が憶測されてしまいます
どのようにするものでしょうか?
UUIDをつかうのも大仰するすぎるし桁数も多く伝達が難しそうです

例えばアマゾンの注文番号ですと
同じ日に買ったものでもまったく違う番号のようです
249-6234001-05414XX
249-2921148-14366XX
249はなにかの符号だとして、ほかはランダムなのでしょうか?

#2 2023-09-04 19:29:27

鯖缶屋
Member

Re: 憶測されない請求書番号の作り方

憶測されないような請求書番号の発行は、手っ取り早いのはランダム生成でしょうね。
ランダムでなければ、アマゾンにとって何らかの規則性があったにしても、こちら側からは何の事か分かりません。
結論、推測も憶測も出来ないと言うことになります。

上記のアマゾンの例で言うなら、自分の場合次のようにします。
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

#3 2023-09-04 20:44:55

himadanee
Guest

Re: 憶測されない請求書番号の作り方

7桁なら乱数を7回生成しないでも1つの乱数から7桁取り出せば足りますが...

#4 2023-09-04 22:17:50

<>
Guest

Re: 憶測されない請求書番号の作り方

単純に計算フィールドでやると
被る可能性がありませんか?

#5 2023-09-04 23:20:33

鯖缶屋
Member

Re: 憶測されない請求書番号の作り方

><>さん
被る確率は極めて低そうではありますが、0ではないですよね。確か被らせない方法があったのですが思い出せません。

>himadanee
FileMakerは人によって計算方法やステップが異なり色々な手法があります。
吐き捨ててしまうのは簡単ですが代替案でも示してくれれば見てくれている皆さんのためにもなると思います。
「今までこうやっていたけど、こんなやり方もあるんだぁ!?」ってより一層関心が高まると思います。

この掲示板があることによって、創造するための新しいインスピレーションが湧いたり、ひらめきに乏しかったりして困っている時は本当に助かります。
思いやりと優しさを持って、FileMakerライフを楽しんでいきましょう。

Offline

#6 2023-09-04 23:21:05

Shin
Member

Re: 憶測されない請求書番号の作り方

簡単な暗号化を行えばいいですよね。
例えば、3桁の数字を隠す方法として、
乱数の中の別に指定した桁を置き換える、という方法があります。
例として、417223156989 という数字列で 129 という数字を隠しています。生成方法は、123456789という数字列の4桁目、1桁目、7桁目にこの潤で 129を置き換えであります。その位置情報は最初の3桁です。
最初の数字例を乱数で発生させておけば、解読する事は困難でしょう。解読方法を知っている人には、簡単に読み取れます。

Offline

#7 2023-09-04 23:36:20

<>
Guest

Re: 憶測されない請求書番号の作り方

Shinさん
どのように計算したらできますか?

#8 2023-09-05 09:01:20

チポ
Member

Re: 憶測されない請求書番号の作り方

単に桁数を決めた乱数でいいのでは。

複数桁の乱数発生の方法は、
https://fm-aid.com/bbs2/viewtopic.php?id=14605
ここを参考にすればいいでしょう。

重複を恐れるのなら、
スクリプトで、重複しないまで乱数発生を繰り返せばいいでしょう。

Last edited by チポ (2023-09-05 09:03:38)

Offline

#9 2023-09-05 09:51:20

himadanee
Guest

Re: 憶測されない請求書番号の作り方

そのスレッドの時は数値演算でやってましたが、Right(Random;7)とかでもいいかも。
極まれに文字数が足りないことがあり得るか...
重複と同じでやり直せばいいですが、スクリプトを使わずにWhile関数でできるかな?

>計算フィールドでやると
バックアップからデータを戻す必要が生じたときに再計算されてしまって困るので、計算値自動入力の方がよかったんですが
今はデータを移すツールで再計算させないで入れられるようですね。

#10 2023-09-05 11:38:15

チポ
Member

Re: 憶測されない請求書番号の作り方

> Right(Random;7)
Rightがすごいですね!
桁をいっぱい上げて、Leftで頭の0抜きを取ったことはありましたが、、

Random関数は何桁を返すのでしょう?

Offline

#11 2023-09-05 18:52:18

Shin
Member

Re: 憶測されない請求書番号の作り方

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

#12 2023-09-06 11:10:16

himadanee
Guest

Re: 憶測されない請求書番号の作り方

>Random関数は何桁を返すのでしょう?
ヘルプに書いてないですね。
16桁(普通の1/7とかの無限小数だと16桁表示される)だと思ってたけど、FM19で試したら20桁あるみたいですね...
SetPrecision(Random;100)
とかやっても桁数は増えませんね。
ただ
Length(Random)
を見ているとほとんど21(小数点と数字20桁)ですが、たまに22になることがあります。謎...
(20になるのは末尾の0が消えるので10回に1回ぐらいあっても不思議ではないですが)

#13 2023-09-06 13:26:04

チポ
Member

Re: 憶測されない請求書番号の作り方

私も試しましたが同じような結果ですね。

相当以前に、
Randomの計算式を見たことがあって
その時に桁数も書いてあったように思いますが忘れてしまってます。

話が曲がってます、スレ主さんごめんなさい。。

Offline

#14 2023-09-07 17:48:01

himadanee
Guest

Re: 憶測されない請求書番号の作り方

>重複しない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
)

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 591.04 KiB (Peak: 607.95 KiB) ]