コード決済CPMコード データフォーマット
最終更新:2020/2/26
すべてAndroid版で検証
1次元コードと数字列がエンコードされた2次元コードはそれぞれ先頭6桁~10桁程度がサービス毎に固有の番号で固定されているので、サービス自動判別を実装するのは難しくなさそうに見えます。統一QRコード仕様とEMV仕様はサービス識別用のコードがエンコードされています。
統一QRコード仕様については以下を参照。EMV仕様に関しても多少の説明があります。
https://www.paymentsjapan.or.jp/jpqr/
PayPay
1次元コード (Code128)・2次元コードともに同じ数字列がエンコード
9000 8181 88XX XXXX XXXX XXXX
LINE Pay
1次元コード (Code128)・2次元コードともに同じ数字列がエンコード
9000 0000 00XX XXXX XXX
楽天ペイ
1次元コード (Code128)・2次元コードともに同じ数字列がエンコード
9000 01XX XXXX XXXX
d払い
1次元コード (Code128) は数字列がエンコード、2次元コードは文字列 (Base64、統一QRコード仕様)
9000 0002 XXXX XXXX XXXX XX
Origami Pay
1次元コード (Code128)・2次元コードともに同じ数字列がエンコード
9000 0001 XXXX XXXX XXXX XX
メルペイ
1次元コード (Code128) は数字列がエンコード、2次元コードは文字列 (Base64、EMV仕様?)
3158 9900 XXXX XXXX XXX
ゆうちょPay
1次元コード (Code128) は数字列がエンコード、2次元コードは文字列 (Base64、EMV仕様?)
3158 99YY XXXX XXXX XXX
YYは31,32,33,34,35,36,37,38,39,40のいずれか
au PAY
1次元コード (Code128) は数字列がエンコード、2次元コードは文字列 (独自仕様?)
3158 9921 XXXX XXXX XXX
pring
1次元コード (Code128)・2次元コードともに同じ数字列がエンコード
3158 9995 XXXX XXXX XXX