PDF417（ピーディーエフ417）とは、主にアメリカ合衆国で身分証明書をはじめ様々な用途で使用される、スタック式二次元コード規格である。PDFはポータブル・データ・ファイル（Portable Data File）の略語。417は、コード内の各パターンがバーと空白で成り立っていて、各パターンが17ユニットの長さであることを表している。PDF417はアメリカ合衆国の企業である（現:モトローラ・ソリューションズ社）のYnjiun P. Wang博士によって考案されたものだが、パブリックドメインの状態に置かれており、ISO規格では15438に規定されている。PDF417は、複数のバーコードを連結させることで、記録可能な情報量を拡張できるという特徴も持つ。

用途 
PDF417は商用およびアメリカ合衆国の政府機関などで、様々な用途に使用されている。例えば、PDF417はアメリカ合衆国郵便公社が認可した郵便料金の印刷に使用されている規格の1つである。PDF417はまた、航空業界のバーコード搭乗券規格（BCBP）により、搭乗券の二次元コードとしても使われている。PDF417は 、アメリカ合衆国国土安全保障省（DHS）の標準規格にも選ばれていて、準拠の運転免許証や州が発行する身分証明書（identification card）の機械読み取りゾーンとしても採用されている。イスラエル国が発行したビザや国境通過カードにも、PDF417のコードが含まれている（例）。

特徴 
2次元コードに典型的な特徴に加え、PDF417の特性は次のとおり。

 連結性。PDF417のシンボル（後述）は、順番にスキャンされる他のシンボルと連結して、さらに多くのデータを格納することができる。
 寸法のユーザー指定。垂直バーの幅の広さ（X寸法）や、どのくらいの高さ（Y寸法）にするかを、利用者が決められる。
 パブリックドメイン様式。誰でもライセンス不要で、このPDF417様式を使ったシステムを組み入れることができる。
ISO / IEC文書の紹介
バーコード装置の製造業者およびバーコード技術の利用者は、装置やアプリケーション規格を開発する際に参照できる、公然に利用可能な標準的シンボル仕様を必要とする。ISO / IECの善意と了承で、この国際規格で提供されているシンボルは完全なるパブリックドメインであり、全ての利用者に制限なし、ライセンスも不要、料金も無料である。

フォーマット 

PDF417のバーコード（シンボルとも言う）は3-90行で構成されており、各行は、小さな線型バーコードのようなものにあたる。

各行にあるものとして、
 静粛ゾーン（quiet zone）。これは、バーコードが開始される前の最低限の空白のこと。
開始パターン（start pattern）、でPDF417としてのフォーマットを特定。
「左行（row left）」、には行に関する情報（行番号やエラー訂正レベルなど）が記載されている。
1-30データコードワード（data codewords）。このコードワードは、1つ以上の数字か文字かその他の記号、を表すバーと空白の集団である。
「右行（row right）」、にはこの行に関するより雑多な情報が記載されている。
停止パターン（stop pattern）。
停止後の静粛ゾーン。
全ての行は同じ幅である。 各行は同じ数量のコードワードを有している。

コードワード 
PDF417 は929進法のエンコードを使用しており、各コードワードは0から928の数字を表している。
コードワードは、暗い領域=バーと明るい領域=空白のパターンで表される。これらの各パターンは、4つのバーと4つの空白で成り立っている（名前に4が入っている由来）。 合計の幅は、最も狭い垂直バーの幅の17倍となる（名前に17が入っている由来）。 各パターンはバーで始まり、空白で終わる。

行の高さは少なくとも最小幅の3倍でなければならない。Y ≥ 3 X.

各コードワードを表すために3つの異なるバー=空白パターンが使用される。 これらのパターンは、クラスタと呼ばれる3つのグループに分類される。 クラスタは、0、3、6にラベル付けされている。複数のクラスタでは、バー=空白パターンは使用されない。シンボルの行は3つのクラスタを循環する形で、行1はクラスタ0からのパターンを、行2はクラスタ3を、行3はクラスタ6を使用し、行4は再びクラスタ0を使用する。

下の数式によって、どのクラスタであるかが決定される。

ここでK はクラスタ番号であり、bi はシンボル記号（Xユニット内）のi番目の黒いバーの幅を表す。
あるいは、この式。

ここで、Ei はi 番目のエッジ（端）から次の同じエッジまでの距離。奇数インデックスは、バーの最前エッジから次のバーの最前エッジまで。 偶数インデックスも、また最後部エッジに対する同様のものである。 

3つあるクラスタの目的の1つは、コードワードがどの行（mod 3）にあるかを決定するためである。クラスタは、水平から歪んでいる（斜め方向に向かう）かもしれない1本のスキャン線を使用してのシンボル部分読み取りを許可する。 たとえば、スキャンが先頭行の行6で開始して行10で終了することがある。スキャン開始時に、スキャナは特定の開始パターンを見て、次にクラスタ6内のシンボルを見る。歪んだスキャンが行6と7に跨っている時、スキャナはノイズを検出する。スキャンが行7にあるとき、スキャナはクラスタ0内のシンボルを見る。結果、スキャナは歪みの方向を判別する。スキャナが右に達すると、それは行10にあるので、クラスタ0のパターンを見る。スキャナはまた一定の停止パターンも見ている。

エンコード 
利用可能な929のコードワードのうち、900個がデータに使用され、29個は主要なモード間移行などの特殊機能に使用される。 3つの主要モードはさまざまな種類のデータをさまざまな方法でエンコードし、必要に応じて1つのバーコード内に混在させることができる。

 バイト:5つのコードワードの各グループは6バイトを表す。 （なぜなら9005 > 2566のため。）追加のバイトはコード文字ごとに1つずつエンコードされる。
 数字: n 桁は、⌊n/3⌋+1コードワード、15コードワードで最大44桁までエンコードされる。
テキスト:各コードワードは2文字を表していて、印刷可能なASCII文字（およびCR、LF、HT）を表現する4つのサブモードのシステムによって使用される。
大文字:A-Z、スペース（空白）、小文字に変換、混在に変換、次の数値を句読点として解釈
小文字:a-z、スペース、次の数値を大文字として解釈、混在に変換、次の数値を句読点として解釈
混在:0-9、＆、CR、HT、カンマ、：、＃、 - 、ピリオド、$、/、+、％、*、=、^、句読点に変換、スペース、小文字に変換、大文字に変換、次の数値を句読点として解釈
句読点: ;、<、>、@、[、\、]、_、 `、?、!,CR、HT、カンマ、：、LF、 - 、ピリオド、$、/、"、|、*、、？、{、}、 '、大文字に変換

エラー訂正 
PDF417シンボルが作成されると、2から512までのエラー検出および訂正コードワードが追加される。 PDF417では、リード・ソロモンのエラー訂正が使用されている。シンボルがスキャンされた場合、最大訂正回数は追加されたコードワードの数に等しいが、標準では、訂正された情報の信頼性を確保するために2つのコードワードの保持を推奨している。

ほかのシンボルとの比較 
PDF417はスタック式（多段重ねの）バーコードであり、単純な線形スキャナをシンボル上で操作することで読み取り可能である。それらの線形スキャナでは、開始と停止のコード文字を含む左右の列が必要となる。加えて、そのスキャナはどの行がスキャンされているかを知る必要があるため、シンボルの各行も行番号をエンコードする必要がある。さらに、線形スキャン読み取り機は単一行だけをスキャンするとは限らない。大概は1つの行を読み取り始めるが、隣接を超えて次なる行と交差して読み取り続けることもありうる。これら交差の影響を最小限に抑えるため、PDF417モジュールは一般的に高さが幅の3倍という、背高で幅狭いものになっている。また、各コードワードは、越境が発生したときにそれを検出できるよう、どの行に属するのかを明示しなければならない。コードワードはまた、デルタデコード可能なようにも設計されているので、いくつかのコードワードは冗長である。各PDFデータコードワードは約10ビットの情報(log2(900) ≈ 9.8)を表すが、印刷されたコードワードは17モジュール幅である。高さ3モジュールを含めて、PDF417コードワードは10ビットを表現するため51正方形モジュールの形をとる。その領域は、開始、停止、行、フォーマット、誤り検出訂正（ECC）情報といった他のオーバーヘッドを含まない。

DataMatrixやQRコードなど他の二次元コードは、未調整な線形スキャンの代わりにイメージセンサでデコードされる。これらのコードは未だに認識と照準のパターンが必要だが、顕著である必要はない。8ビットのコード文字は8正方形モジュールの形をとる（認識、整列、フォーマット、およびECC情報を無視する）。
 
実際には、PDF417シンボルはDataMatrixまたはQRコードの約4倍の領域を占める。

注釈