• ベストアンサー

自動採番のプログラム(?)

初心者ですが、会社のHPを作成しています。 よくショッピングモールなどで買い物をした際に、個人に割り当てられるコードがありますよね?伝票番号、管理番号呼ばれるコードです。 そのコードは、どのように設定するのでしょうか?「CGIを使用する」「アクセスカウンタと同じ原理」だと聞いたことがあるのですが、その「アクセスカウンタの原理」が良く分かりません。 CGIに詳しい方がいらっしゃいましたら、ご教示お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.2

ANo1 さんのおっしゃる通りなんですが、 このアクセスカウンタの時、必ず出てくる話を しておきます。 コード、それが伝票番号・管理番号なんであっても ・ 現在使っている番号を調べる ・ そこから、まだ使っていない番号を作る ・ 新しい番号を、現在使っている番号に加える という3つ作業を行います。 ANo1 の anmochiさんの例では ・ 実行時にそこから取ってきて ・ 1足して表示して ・ ファイルに書き戻す の3つ作業のことです。 しかし、仮にAさんとBさんの2人分のコードを 割り当てる場合ですね、 ・ Aさん「現在使っている番号を調べる」 ・ Aさん「そこから、まだ使っていない番号を作る」 ・ Aさん「新しい番号を、現在使っている番号に加える」 ・ Bさん「現在使っている番号を調べる」 ・ Bさん「そこから、まだ使っていない番号を作る」 ・ Bさん「新しい番号を、現在使っている番号に加える」 なら問題ないのですが、この2人がほぼ同時刻に やってきて、並列に処理が進んだとします。 ・ Aさん「現在使っている番号を調べる」 ・ Bさん「現在使っている番号を調べる」 ・ Aさん「そこから、まだ使っていない番号を作る」 ・ Bさん「そこから、まだ使っていない番号を作る」 ・ Aさん「新しい番号を、現在使っている番号に加える」 ・ Bさん「新しい番号を、現在使っている番号に加える」 すると、AさんとBさんには同じコードが割り当てられて しまう問題が発生します。 これではいけないので、Aさんのコード割り当て作業中は だれにも邪魔させないようにする機構を『ロック機構』と いいまして、コードを割り当てる作業には、必ずといって いいほど、このロックの話が出てきます。 排他処理とも言いますが、アクセスカウンターの CGI には 中のソースを見ると、大抵この処理が含まれていると 思います。 ファイルにコードを記録する場合は、ファイルのロック 機構を利用し、データベースに記録する場合は、 データベースのトランザクションを利用しますが、 データベースの場合、オートナンバーという機能を 利用すると便利かもしれません。 > そのコードは、どのように設定するのでしょうか ・ 1つずつコードの番号を増やしていく ・ 日時などをもとに一意になる番号を生成する ・ かぶらないようにランダムな番号を割り当てる いろいろ方法が存在しますね。 2つ目の例だと、コードを見れば登録日時が わかってしまうのですが、これがいいのか悪いのかは その目的に依存します。 1つ目の例だと、例えば、「会員番号が1番」って いうのは、「あっ僕はこのシステムの最初の会員なんだ」 ってバレるかもしれません。あるいは、会員番号 000001 ってなんか寂しくありませんか?(笑) という訳で、どのように設定するかは、好き好きです。 こうしなくてはならないなんてものはありませんよ。

その他の回答 (3)

  • naoto0314
  • ベストアンサー率34% (25/73)
回答No.4

アクセスカウンタの原理は、現在の値を取得して1を足してまた保存するというものです。 伝票番号なんかは、連番になっていると他人を偽ることがあるかもしれないので、ランダムに番号を取得したほうがいいのかもしれません(もちろん、すでに取得されていないかのチェックも行ないます)。

peanuts4317
質問者

お礼

皆様、ご返答頂きありがとうございます。 アクセスカウンタについては、フリーソフトから無事設置することができました。ありがとうございます。しかし、番号の採番については、今だよく分かりません・・・。皆さんの御意見を読んで自分なりに解釈したところによると、まずデータベースを作成することから始まるようですので、フリーのデータベース等を探してみたいと思います。

noname#25358
noname#25358
回答No.3

 いきなり管理番号だけ作成してもどうしようもないのでは……(^_^;  管理番号というのは、バックボーンに「管理システム」があるからこそ必然的に必要になるものです。  よって、番号だけ作成してそれっぽく画面に表示させても、何の意味もないわけです。  なんで、管理番号の如何も分からないのであれば、既存のデータベースCGIなどを拾ってきた方が早いんじゃないでしょうか?

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

CGIうんぬんよりも、ファイルなりデータベースなりに「現在何番まで使っているか」を保存しておき、実行時にそこから取ってきて1足して表示してファイルに書き戻す処理を考えればよいのではないかな。 アクセスカウンタならperl(←CGIでよく使われる)なりphpなり何なりでその辺に転がっているので探すと良かろう。

関連するQ&A