シリアル番号
出典: フリー百科事典『ウィキペディア(Wikipedia)』
シリアル番号(英: Serial number)とは、ある決まった離散的整数値によって個々の識別をするために割り当てられる一連のユニークな数である。典型的用法が拡大され、オブジェクトの大きな集合の元を識別する数値や文字列だけでなく、情報工学におけるデータ処理での識別に使われるようになった。数値的識別子が全てシリアル番号というわけではなく、シリアル番号ではない識別番号を nominal number(名目番号)と呼ぶ。
シリアル番号は通常、負の値はとらず、1 または 0 から始まる。
目次 |
[編集] 利用
- シリアル番号は品質管理で有効であり、ある期間に製造した製品に欠陥が見つかった際に、シリアル番号によって素早く欠陥商品群を特定することができる。また、盗難や偽造に対してもシリアル番号が有効であり、盗品や偽造品の発見を容易にする(製造番号参照)。
- コンピュータのソフトウェア製品にはシリアル番号が付与されることが多く。インストール時にそのシリアル番号の入力を要求されることが多い。入力された番号はあるアルゴリズムで検査され、偽造された番号での利用を防いでいる。
- 日本のように、紙幣にはユニークなシリアル番号が付与されている国もあり、シリアル番号は偽札の追跡にも活用される。
- 雑誌などの定期刊行物にはISSN(International Standard Serial Number)が付与される。また、通常の書籍にはISBNが付与される。
- 暗号理論の広範囲な利用に認証局が必要とされる。認証局が発行する公開鍵は一種のシリアル番号であり、後述するシリアル番号の算術が適用される。
[編集] シリアル番号から総数を推定する
何らかの製品にシリアル番号が付与されていて、それが連続な番号である場合、n 個のサンプルをとることでベイズ推定や最尤法をつかった大雑把な総数の推定が可能である[1]。
[編集] シリアル番号の算術
シリアル番号は通信プロトコルでよく使われ、シーケンス番号などと呼ばれる。これは、パケットの順序を確定するために必須である。しかし、シーケンス番号に割り当てられるビット数は固定であり、一巡すると再度最初から番号が再利用される。従って、最近割り当てられたシリアル番号とずっと以前に割り当てられたシリアル番号が同じということになる。このようなシーケンス番号の曖昧さによる問題を防ぐため、RFC 1982(Serial Number Arithmetic)では、この種のシリアル番号を使った計算に関する特別なルールを定義している。
一部のプロトコルは問題を無視し、単にシリアル番号として大きな整数を使い、問題が発生する前に技術が廃れるだろうと見なしている(2000年問題参照)。
[編集] シリアル番号の演算
ここでは、シーケンス番号に小さな正の整数を加算することと、シーケンス番号同士の比較について解説する。符号なしの実装だけを扱い、ビット数は RFC と同様 "SERIAL_BITS" で表す。
[編集] 加算
シーケンス番号への整数の加算は、単純な符号なしの整数の加算の後で、符号なしの剰余演算を行って加算結果を範囲内に収める(一般にCPUの符号なしの加算命令では自動的にそのような演算が行われる)。
s' = (s + n) modulo (2 ^ SERIAL_BITS)
以下の範囲外の値の加算は未定義である。
[0 .. (2 ^(SERIAL_BITS - 1) - 1)]
基本的に、加算結果がこの範囲外であれば「丸め」が発生し、結果としてシーケンス番号は元の値より小さくなる。
[編集] 比較
2つのシーケンス番号 i1 と i2(シーケンス番号 s1 と s2 の符号なし整数表現)の比較方法を以下に示す。
等しいかどうかの比較は通常の数値の比較と変わらない。大小比較のアルゴリズムは複雑であり、一方のシーケンス番号が値の範囲の限界付近の場合を考慮して「丸められた」小さい値を実際には大きい値と判断しなければならない。つまり、s1 が s2 より小さいと見なされるのは、以下の場合である。
(i1 < i2 and i2 - i1 < 2^(SERIAL_BITS - 1)) or (i1 > i2 and i1 - i2 > 2^(SERIAL_BITS - 1))
同様に、以下の場合に s1 は s2 より大きいと見なされる。
(i1 < i2 and i2 - i1 > 2^(SERIAL_BITS - 1)) or (i1 > i2 and i1 - i2 < 2^(SERIAL_BITS - 1))
[編集] 欠点
このアルゴリズムにはいくつか問題がある。まず、数値によっては大小比較結果が定義されないことになる。アルゴリズムの実装は各種組織が独立して行っているため、そのような問題の発生を防ぐことは不可能に近い。
RFC 1982 では以下のように書いている:
- あらゆる値の組合せについて、この問題が起きないよう大小比較を定義することは可能と思われるが、そのような定義は機器への実装の負担となるだろうし、理解しにくくなる。また、次のような場合の意味は直観的にわかりにくい。
- s1 < s2 and (s1 + 1) > (s2 + 1)
- 従って、問題となるケースは未定義として、実装では何らかの結果を返しても良いし、エラーを返してもよいものとし、ユーザーはどちらであっても対処できるよう注意しなければならない。通常、これはそのような値の組合せが存在しないようにすることになるだろう。
[編集] 参考文献
- William W. Plummer, "Sequence Number Arithmetic" BB&N Inc, September 1978.
- R. Elz and R. Bush, RFC 1982, "Serial Number Arithmetic" Network Working Group, August 1996
- ^ Höhle M, Held L. Bayesian Estimation of the Size of a Population, retrieved 15 January 2005.