プロが教える店舗&オフィスのセキュリティ対策術

10000通りのユニークなシリアル番号を生成させるプログラムを
作りたいと考えています。

00000
00001
00002
...
99998
99999

という数字が縦に並んだテキストファイルを用意して、それを読み込んで

00000→8401923
00001→4234420
00002→1354234
...
99998→4235662
99999→9557346

というような7桁の数字だけのシリアル番号を作りたいのです。
また、一つのシリアル番号、仮に8401923という数字を利用して
下一桁をちょっと変更したぐらいでは、
他のシリアル番号にHitしないような作りにしたいと思います。

10000までの連番の数字に、何かしらのマスク処理をかけて
シリアル番号を生成させる感じだと思うのですが
その、マスクの部分の具体的な処理がよくわからないのです。

また、シリアル番号から、元の連番の数値も出したいと考えていますが
それもどのように処理させればいいのでしょうか?

以上になりますが、どうぞよろしくお願い致します。

A 回答 (2件)

可逆なENCODE/DECODEが出来れば良いのであるから、


ロジックがバレなきゃ何でも良いんじゃないですか?

例えば
数字列(abcd)という4桁の数字に対し、

a + 1 = A
b + 3 = B
c + 5 = C
d + 7 = D
を、それぞれ行い、10以上なら、一の位のみ残す。

そして、数字列(ABCD)にチェックデジット(x)を求め付与する。

出来がった数字列(xABCD)に、もう一度チェックデジット(y)を付与する。

xABCDy となる。

シリアルコードが正当なモノかどうかは、デジット計算で行える。

もとの連番値が知りたいときは、デジット桁を捨てて、

10 + A - 1 = a
10 + B - 3 = b
10 + C - 5 = c
10 + D - 7 = d

それぞれのabcdが、10以上なら、一の位だけを使って
数字列(abcd)とする。

プログラミングは難しくないけれど、ロジックさえバレなきゃ、
想像が付きにくいシリアルコードが作れるハズ。

例)
0000 -> 913570
0001 -> 713588

ポイントは、ロジックが推定しにくくなるように、ということだけです。
    • good
    • 0

> その、マスクの部分の具体的な処理がよくわからないのです。



単純に乱数ではだめですか?
(重複がでたら再度乱数をかければ)

> シリアル番号から、元の連番の数値も出したいと考えていますが

番号とシリアルを対応させたリストを別に作っておくことになるでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!