シリアル番号

シリアル番号（シリアルばんごう、）は、ある決まった個々のをするために割り当てられる、一連ので等差な整数である。
数値的識別子が全てシリアル番号というわけではなく、シリアルではない識別番号の例として、数値に識別以外の情報がない（名目値とは無関係）がある。
シリアル番号は任意の数から始めることができ、さらに任意の一定差分ずつ増減させることができる（ただし途中で差分を変えることはできない）。しかし通常は、1 または 0 から1ずつ増え総数または総数－1で終わり、総数を超えたり負数になることはない。
使用例.
典型的用法が拡大され、オブジェクトの大きな集合の元を識別する数値や文字列だけでなく、情報工学におけるデータ処理での識別に使われるようになった。
シリアル番号から総数を推定する.
何らかの製品に1から始まるシリアル番号が付与されている場合（始まりが1でないが既知の場合は定数を加減することで1から始まるシリアル番号に変換できる）、"n" 個のサンプルをとることで総数の推定ができる。
最も単純には、シリアル番号の最大値が "N" ならば、総数は "N" 個以上である。より精細には、ベイズ推定や最尤法をつかった大雑把な総数の推定が可能である。
シーケンス番号の算術.
シリアル番号は通信プロトコルでよく使われ、シーケンス番号などと呼ばれる。これは、パケットの順序を確定するために必須である。しかし、シーケンス番号に割り当てられるビット数は固定であり、一巡すると再度最初から番号が再利用される。従って、最近割り当てられたシリアル番号とずっと以前に割り当てられたシリアル番号が同じということになる。このようなシーケンス番号の曖昧さによる問題を防ぐため、RFC 1982（）では、この種のシリアル番号を使った計算に関する特別なルールを定義している。
一部のプロトコルは問題を無視し、単にシリアル番号として大きな整数を使い、問題が発生する前に技術が廃れるだろうと見なしている（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 では以下のように書いている: