NFCカードリーダーでイベント参加管理

社内や仲間内、学校での会議やイベントを行う際に、出席管理をNFCカードリーダーで非接触自動名簿化ができるしくみをExcelのVBAで構築してみました。
各参加者が手持ちのカードをカードリーダーにかざすだけで、出席扱いになるので、非常に便利です。
社員証や学生証など各参加者がNFC(Felica)のIDカードを持っている事が前提ですが、NFCであれば何でも良いので、各自のSuicaやnanacoなどでも大丈夫です。(ただし、マイナンバーや運転免許証などはIDmがランダムになるので不可です。)
また、読み込んでいるのはカード内のIDm(固有ID)だけなので、簡易な出席管理などに最適です。

一般的には、NFCカードリーダーシステムは、大学の出欠管理や、カードキーなどとしてシステム化はされていますが、システムに組み込まれているため、気軽な応用ができません。しかし、このしくみは、Excelファイル単体だけでさっと使えるので、イベント管理以外にも、蔵書管理や、在庫・製品管理など、小グループや家庭でもちょっとした時にすぐ使えるのがメリットです。

開発環境

この開発でお世話になったのは、ひつじかいの雑記帳さんのSheep Smart Card Dllです
これはWindows専用ではありますが、VBやExcel VBAで使用可能なdllで、Excelで手軽にカードリーダーが使えるようになる優れものです。
IDmしか取得しないので、suica等の残高や履歴などは一切読み取れませんが、NFCカードの一意性だけを利用する用途であれば、むしろこの簡便さが便利です。
そして、ひつじかいさんのページには、サンプルコードもありますので、それを参考にすれば、とりあえずすぐ動くExcelファイルが作れます。

VBAでの記述

宣言部分は、使用しているWindowsとExcelのビット数(64ビットか32ビットか)によってコメントアウトする箇所を変更します。
Sheep Smart Card Dllのサンプルコードより。

'OSのビット数(32bit/64bit)及びExcelのビット数に応じて、以下の部分を書き換えて下さい

'(a) OS、Excelいずれも64bitのケース(SheepSmartCard64.dllをC:\Windows\System32に置いて下さい)

Private Declare PtrSafe Function GetSmartCardUID Lib "SheepSmartCard64.dll" (ByVal SCardUID As String) As Integer

'(b) OSは64bit、Excelは32bitのケース(SheepSmartCard32.dllをC:\Windows\SysWOW64に置いて下さい)
'Private Declare Function GetSmartCardUID Lib "SheepSmartCard32.dll" (ByVal SCardUID As String) As Integer

'(c) OS、Excelいずれも32bitのケース(SheepSmartCard32.dllをC:\Windows\System32に置いて下さい)
'Private Declare Function GetSmartCardUID Lib "SheepSmartCard32.dll" (ByVal SCardUID As String) As Integer

'dllをシステムフォルダ以外に置く場合は上記のSheepSmartCard64.dll(SheepSmartCard32.dll)の部分をフルパスで記述して下さい

開発環境は、Windowsは64ビット、Excelも64ビットでしたが、実行環境はWindows64ビット、Excel32ビットだったのでコメントアウトの箇所を変える必要がありました。宣言部以外のプログラムそのものは同一でOKです。

サンプルコードを参考に、以下のコードでIDmを取得します。

ret = GetSmartCardUID(strCardUID)

strCardUIDは、引数ですが、GetSmartCardUID関数を呼んだ後、IDmの結果が帰って来ますので、これを、別途、イベント参加者の登録事前登録表や、参加受付表と紐付ければ参加管理ができます。
このあたりのUIの作り込みは、イベントという瞬発力の必要な参加者管理なので、キー操作なしで、連続的にカードを読み取れるUIを作る必要があると思います。
そこで、下記のような自動読み取りモードのボタンを押すと、自動読み取り終了が押されるまで、ずっと連続的に読み取り可能なループを回すことにしました。

この機能を持たせることで、初回のみ参加者との紐づけ登録が必要になりますが、2回目以降はsuicaで改札口を通る感覚で、参加者受付ができます。
・未登録のIDmが来たら、登録を促す。
・登録済みのIDmなら参加受付とする。
という単純な機能だけにしたので、使い勝手良く、いろいろな応用が利きそうです。
そのミドルウェアとしてdllを公開してくれたひつじかいさんに感謝です。