記号や番号などを生成するとき

伝票番号や、その他の番号などをつくるときは、前もっていろいろなルールを検討するものです。

たとえば、桁数(文字数)をそろえるべきか、そうでもないか。何かの注文を受けたときに発行する伝票番号みたいなものは、あとで決まったフォーマットに印字するであろうことを考えて、桁数を一定にしておくことが多いです。また、その番号の一部分には年月日のような情報を混ぜておくことで、あとから、どの時期の伝票だったかが見当つきやすいようにしておくと便利なことがあります。伝票データの一覧を伝票番号で並び替えたときに、意味のある順序に並ぶようにしておくためにも、年月日が決まった位置(先頭なことが多い)に入っているというのは悪くありません。

桁数が一定でないような番号をつけることはそれほどないですが、シンプルな数字を一時的な管理番号として使う場合なんかは、桁数の統一にそんなにこだわることはないでしょう。たとえば順番待ちの番号札を発行することがあるとして、それが100人以上になっても対応できるようにするには、必ず3桁に固定した番号を発行しないといけないかといえば、そうでもないです。番号札に「099」とあえて書かれているまでもなく、「99」だったとしても別になんの問題もありません。

年月日や発行順のようなものに頼らない、もっとランダムな感じの番号(記号)を作ったほうがよいという場面もあります。

お客さんに伝えて、あとでお客さん自身が情報を照会するときにもその番号を使うようなものがあるとします。ウェブサービスとかに記号を入力する用途になるかもしれません。ホテルの予約番号なんかはこういう感じですね。こういうときは、番号になにか法則を持たせてしまうと、「別の番号も試して、別の誰かのデータも照会してみちゃおう」というイタズラが可能になってしまいます。これだと他人のプライバシーを危機にさらすことになっていまいかねません。こういうケースが想定されるような使い道なら、発行する番号は、推測が不可能なものにすべきでしょう。または、伝票番号と照会番号を別々につけておく、というのも手ですね。伝票番号は年月日がくっついた予測可能なもので、照会番号は予測不可能に。

ホテル予約だけでなく、コンビニプリントに予約記号を打ち込むようなものも、この例です。あてずっぽうで何か入力しても、別のデータにたどり着ける可能性はごくごくわずかですよね。

ユーザーに何かパスワードを発行して使ってもらう際も、言うまでもなく、充分に長くて推測不可能な記号を作ってあげる必要がありますね。何らかの法則性があっては困ります。

あと、お客さんに覚えてもらう必要がある番号については、読み間違いが起こりにくいような工夫をすることがあります。特に、英数字が混じったものになる場合はちょっと考慮が必要です。すごくよくあるのは、O(オー)と0(ゼロ)の読み間違い。こういうことを避けるためには、番号にはOも0も入らないこと、というルールを加えたりします。

番号の最後の1桁がチェックサムになっている、という性質を持たせることもあります。こうすると、その番号が、そもそもそのシステムから発行されたものなのかどうかを事前に確かめることができるようになります。クレジットカードの番号なんかは、確かそのうちの一部分がチェックサムになっていて、番号だけを見て、そもそも有効なクレカの番号なのかどうかを判別できるようになっていたはずです。偶然チェックサムが合っているときもあるでしょうが、それでも充分役に立ちます。将来的にその番号が悪用されにくいようにする必要があるとき、こういう工夫をすることがあります。

なにしろ、管理用の番号を新しく作るときは、いろいろなことを想定して、どんなルールのもとにその番号を生成するべきなのかを考えるとよいです。