したいこと
OfficeでNFC読み取りしたい
C#でNFC読み取りしたい
OfficeでFelica/Mifareカードの読み取りしたい
実践編
本記事のAPI等の下調べをもとに、ライブラリを選定し、実際に PasoriとPCSC(Sharp)でやってみた記事です。
Suica/ICOCA読み取りアドインにしてみました。
C#のNDEF用ライブラリを作ってみました。
NFCカード読み取りAPI/SDK(C#)
日本語で検索して、C#で使用できるAPI/SDKには以下のようなものがあります。Windows.Devices.SmartCardsとProximityAPIとの違いがいまいち把握できませんでしたが、こちらで少し言及がありました。
- Felica Library(Felicalib)
- winscard.dll
- Proximity API
- Windows.Devices.SmartCards(UWP)
- SDK for NFC Starter Kit
- NFC開発キット for Windows(有料)
- PCSC-sharp
それぞれのAPI/SDKの概要
Felica Library
有志の方が作られたライブラリです。フリーソフト(BSD ライセンス)。
0.4.2 (2008年6月より更新はされておられません。)
無償
サンプルコードは色々ありますが、C#で Felica Library「felicalib.dll」を使用するが分かりやすかったです。C#による Felicaカードのデータダンプもわかりやすいかもしれません。
winscard.dll
Windows7以降には標準に添付されているDLLです。もちろん無償。
TipsZoneさんのNFC入門、言語はRubyですが、参考になります。
TomoSoftさんのPC/SC APIを用いてSuicaカードの利用履歴情報の読み取り、まさに求めていたもの。
Proximity API
Windowsストアアプリ入門 vol87:NFCを利用する
NFC を使った最先端のアプリの開発、MSのブログより。
Windows.Devices.SmartCards(UWP)
UWPアプリ開発で標準に添付されているDLLです。もちろん無償。
うさ☆うさ日記さんの、Windows.Devices.SmartCards名前空間のクラスとPaSoRiでFeliCaカードを使う、導入部分だけですが、解説されており参考になるかと。
NFC Smart Card Reader PC/SC Libraryの使用例、Windows 10 MobileでFelicaカードの読み取り~Edy・Suica編
SDK for NFC Starter Kit
SONYさんが用意されているSDKです。
Starter Kitは無償。有償版もあり。
NFCまたはFeliCaを利用する多彩なアプリケーションソフトウェアを、パソコン上で効率的に開発できるツールです。 開発・評価用の無償版「Starter Kit」もお試しいただけます。
サンプルコード:
SDK for NFC Starter Kitサンプルのまとめが有用かと思います。
NFC開発キット for Windows(有料)
Orange TagsさんのNFC開発スタートキット。個人で開発するには高いかもしれませんが、会社の経費・開発費で落ちるなら納得のいく価格かと思います。
PCSC-sharp
Nugetからダウンロードできます。PCSC-sharp、かなり期待がもてそうなライブラリです。ライセンスは2条項BSDライセンスのようです。コーディングサンプルもあるので、優先で少しずつ試してみたいと思います。
その他別の言語ですが、有用な記事
C言語
C++
LazyPCSCFelicaLite (C++でPC/SCを使ってFelica Liteにアクセスするライブラリ)
VB
VB.netでPC/SC(NFC通信)してFelicaやMifareを読み取るサンプル
ラズパイ(言語くくりでもありませんが。。)
カード側
全般的
全般的にまとまっているのは、Sonyさんの NFCについて – NFCの定義, NFCフォーラム仕様, NFCとFeliCaの関係あたりでしょうか。
また、NDEFという規格がありますが、【NFC】NDEFについて理解するに記載のあるように、URLなどの共通で使用できるものは符号化しちゃって、データを圧縮しようという考えのようです。仕様書もこちらから http://archive.eet-china.com/www.eet-china.com/ARTICLES/2006AUG/PDF/NFCForum-TS-NDEF.pdf?SOURCES=DOWNLOAD ダウンロードできるようですので、そんなに長くないですし、読めると思います。(後日談 2019/03/22→この時思っていたのと少し違って、そんなに圧縮はしてない。むしろ、データの区切りとタイプをハッキリさせるための規格です。仕様は意外に歴史の積み重ねがあり厄介です。特にType2 Tagの歴史を知る必要あります。これを参照。たまにはまります。)
C#のNDEFライブラリも探せばすぐ見つかるので、併せて使ってみたい。(後日談 2019/03/22→あまり、思っていたのとライブラリも違い自分でちゃんと読むことになりました。)
Felica/Felica Lite-sについて
Felica 概説
NFCとFeliCaの関係にも書かれていましたが、Felicaでオープン規格になっている部分(Suicaの履歴部分のような領域)は、暗号化等の対応なしに、読み取り可能です。オープンになっていない部分はたぶんSonyさんとかにお金を払って、規格を教えてもらったり、APIそのものやAPIの使用方法を提供してもらうんでしょうか。こちらのイーガルドさんの記事も参考になるかと思います。
FeliCa Standard 仕様
FeliCa Lite-S 概説
Felica Lite-Sは、以下のように、フルオープンで簡単にカードを使用できるようにしたものですね。軽い暗号化は可能なため、セキュアにも使用可能です。
FeliCaとは異なる通信暗号化機能とファイルシステムを採用することで、低コスト化を実現しています。 FeliCaと同様のインフラの利用が可能です。またアンテナの小型化により、カード形状以外の様々な製品化が可能です。富士フィルムさんより
こちらのイーガルドさんの記事も参考になるかと思います。
Felia Lite-S仕様
Mifare 1k/Ultra lightについて
Ultra Lightについて自分で仕様書を読んで、解説してます。
(編集中)
まとめて
これ以降の記事でまとめていく・実験していく予定の詳細としては、
- C#のPCSC-Sharpの使い方をマスターする。
- C#のPCSC-SharpでIDmを読み取れるようになるとカードの種類を識別できる。(2018/10/12ここまで達成以下のリンク先参照。)
- Suica/icocaの履歴領域をC#のPCSC-Sharpで読み取る。
- 読み取ったデータをサイバネ規格と比較しながら正しいかどうかを確認する。
- サイバネ規格までいけたら、VSTOでOutlookのアドインとしてまとめてみる。(できたが長かった。。)
- C#のPCSC-Sharpを用いて、Mifare Ultra Lightを購入して、書き込んだり、読み取ったりしてみる。
- C#のNDEFライブラリを作ることになるとは(2019/04/09 項目追記)
- 当初は以降もやる予定でしたが、これ以降の項目はゆっくり時間をかけてひまなときにやります。
- C#のライブラリ(onovotny/MiFare)で用いて、Mifare 1K/4Kを購入して、書き込んだり、読み取ったりしてみる。この方の記事を参考。
- Felica Lite-Sの書き込みで使われている3DESについて調査してみる。
- C#のPCSC-Sharpを用いて、Felica Lite-Sを購入して、書き込んだり、読み取ったりしてみる。C言語ではあるがこの方の記事を参考。C++の記事も参考。PCSCなのでかなり参考になるはず。こちらも良いかと思われます。
- エクセルのVSTOアドインとして、連続での書き込みをできるようにしてみる。
- Androidのソフトを作成して、Felica/Mifareを読み取ったり、書き込んだりしてみる。。
その他
探しているとOutlookでPaymentなんていう記事も出ていました。支払い等に使用できるのでしょうが、思っているものとは違う気もしますので、引き続きFelica/Mifareカードの読み取りの調査をしていきたいと思います。
Nマーク使用上のガイドラインも念のため、メモ。アイコンとかも、ライセンサーとの契約が必要のようです。
有用と思えるような情報があれば、また追加します。