数時間前、FeliCa Lite-SのIDmが重複しているという記事を掲載しましたが、結論から言うとそれは誤りでした。200枚調達し、200枚とも固有のIDmを持っていました。

先ほどあの記事を掲載した後、「どれだけ重複しているのか」を確認するため、200枚全ての読み取りを行ったところ、200枚間違いなくあるのに、IDm(らしきもの、とします。理由は後述)は122個しかないという、驚愕の結果に。。

さすがにこれは何かの間違いではないかと思い・・・どういうパターンで重複が発生しているのか分析するため、読み取ったIDmをデータベースからcsvでダウンロードし、Excel上でごにょごにょし始めたのが23時。

法則性を見出すため、IDm(らしきもの)は16進数表記なので、2進数やら10進数やらに変換を試みたところ、Excelで扱える16進数の桁数の問題で弾かれ、じゃあ下5桁だけ取り出して検証しようかと思い、よく見てみると・・・

らしきもの、の正体

IDmは本来16進数16桁ですが、IDm(らしきもの)は16進数が14桁しかありません。

これはつまり、FeliCa Lite-Sだと思っていた目の前のカードが実はMifareカードだった(MifareのIDmは14桁)ということになるか、もしくは読み取り時に桁の欠落が起きているかのどちらかです。

そこで、改めてIDm読み取り部分のソースコードを眺めてみると、14桁しか取得していないことが発覚。

というわけで、無事、16桁正しく取得するように書き換えを行い、200枚全てを調査したところ、1枚の重複もありませんでした。

届いたFeliCa Lite-Sカードを急ぎで検品したくて、ネット上に公開されていたスクリプトをほぼそのまま利用させてもらい検証ツールを急遽作ったのですが、それが落とし穴でした・・・。

今日の教訓

他人の書いたコードは信用しちゃダメ、ゼッタイ。