質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%

Q&A

解決済

1回答

5737閲覧

nfcpy環境下でPaSoRiを通して取得したType4Tagの固有IDの一意性保証

haranychan

総合スコア2

NFC

無線通信

0グッド

1クリップ

投稿2021/06/24 02:07

nfcpy環境下でPaSoRiを通して取得したType4Tagの固有IDの一意性について

Windows10で構築した上記環境において、NFCタグの固有ID(IDm)を用いて利用者を識別するシステムを作っています。
(IDを用いることによるシステムのセキュリティ低下は、一旦 度外視させてください)

学生証や交通ICカードはType3Tag (FeliCa Standard)のため、tag.idmあるいはtag._nfcidとすれば固有IDを取得できます。一方で、スマホのようなType4Tag (Type4ATag, Type4BTag)については、tag.identifierやtag._nfcidで取得するID(正確にはuidでしょうか)は、読み取りの度に異なる値になります。
同じタグであればいつ読み取っても一意にするためには、どのようにすればよいかご教示くださいますと嬉しいです。

IDmを取得するソースコード

python3

1# coding:utf-8 2 3import nfc 4import binascii 5 6for i in range(2): 7 8 with nfc.ContactlessFrontend("usb") as clf: 9 tag = clf.connect(rdwr={'on-connect': lambda tag: False}) 10 11 if tag.TYPE == 'Type3Tag': 12 idm = binascii.hexlify(tag.idm).decode() 13 idm2 = binascii.hexlify(tag._nfcid).decode() 14 elif tag.TYPE == 'Type4Tag': 15 idm = binascii.hexlify(tag.identifier).decode() 16 idm2 = binascii.hexlify(tag._nfcid).decode() 17 18 print('Trial', i) 19 print('\tTag type :', tag.TYPE) 20 print('\tCard IDm1:', idm) 21 print('\tCard IDm2:', idm2) 22

出力結果

Type3Tagでは2回の試行で同一のIDmが得られます

Trial 0 Tag type : Type3Tag Card IDm1: 01xxxxxxxxxxxxxx (16桁の16進数ID, 伏せてあります) Card IDm2: 01xxxxxxxxxxxxxx Trial 1 Tag type : Type3Tag Card IDm1: 01xxxxxxxxxxxxxx Card IDm2: 01xxxxxxxxxxxxxx

一方で、Type4Tagでは2回の試行で異なるIDが得られます

Trial 0 Tag type : Type4Tag Card IDm1: 08yyyyyy (16桁の16進数ID, 伏せてあります) Card IDm2: 08yyyyyy Trial 1 Tag type : Type4Tag Card IDm1: 08zzzzzz Card IDm2: 08zzzzzz

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のようにするとType3Tagを取得できるようになるかと思います。

tag = clf.connect(rdwr={'targets': ['212F', '424F'], 'on-connect': lambda tag: False})

投稿2021/06/24 02:54

deo_deo

総合スコア198

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haranychan

2021/06/24 03:03

ご回答ありがとうございます。Type3Tagは問題ないのですが、Type4Tagで一意なIDをとりたいという質問です…
deo_deo

2021/06/24 03:30

ではUIDはどうでしょうか?
haranychan

2021/06/24 04:39 編集

度々のご回答、本当にありがとうございます。 Type4TagのUIDは、調べる限りではなさそうでした… ```python3 tag.uid Traceback (most recent call last): File "<string>", line 1, in <module> AttributeError: 'Type4ATag' object has no attribute 'uid' ``` +-------------------------------+ 少し前に戻り恐縮なのですが、最初にいただいた回答について勘違いをしておりました。 [こちらの記事]( https://qiita.com/NoTASK/items/c2e1e3803cdb2a93bec7 ) を先に読んでおりましたが、解決策の際スマホはあきらめてICカード(Type3Tag, FeliCa Standard (RC-S962))で試されたものだと誤解しておりました。 しかし、実際はスマホはType3TagもType4Tagも搭載しており、deo_deo様や先ほどの記事がご提案してくださった方法で、手持ちの2台のスマホ内のType3Tag(FeliCa Mobile 3.0)のみを抽出することに成功しました。記事の通り、確かにType4Tagに対する直接の解決策ではないのですが、「スマホで利用者を識別する」という目的は達成できそうなので、これにて一旦解決とさせていただきたいと思います。 気付きを与えてくださる機会と、ご指導をありがとうございました!
deo_deo

2021/06/24 06:46

いえ、私もType4に関してはnfcのライブラリでどうやって一意性を確保できるのか気になって調べたのですが、ちょっとNFCの複雑な仕様にギブアップでした・・・ もっとドキュメントを読めば糸口が見えるかもしれませんが、私も一旦はType3で我慢してます(笑) 進展あったら、こちらに追記しますね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問