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

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

ただいまの
回答率

89.23%

ICカードを読み取る仕組みはどの様に実装すれば良いでしょうか?

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 6
  • VIEW 5,860

hasshy

score 78

内容が曖昧で回答に困るところもあるかと存じますが、どんな些細な事でも構いませんのでご助言いただけますと幸いです。
ICカードを用いたシステムを作りたいと思っており、仕様を検討しているのですが煮詰まっており、お知恵をいただきたいです。

sonyが発売しているPasoriを購入して仕様を確認しています。
仕様を確認していると、SDKで提供している様なのですが、特にオープンで情報が共有されていない様でした。
https://www.sony.co.jp/Products/felica/business/products/sdk.html

やりたい事

WebでICカードを読み取るシステムを実装したいです。
下記のサイト様で、ご紹介している製品の様にWebで解決できるシステムを実装したいと考えています。
https://www.orangetags.co.jp/app_example.html
https://www.orangetags.co.jp/orange_post.html

お聞きしたい事

カードの種類は何処で調べられますか?

NFC通信リーダーで使用できるカードの種類について理解を深めたいです。
Suicaや個人情報カードは、読み取れると言う事実はわかるのですが、あのカードは何処から発行されているのでしょうか?
秋月電子の様な電子部品屋さんに何も記録されていないカードが売っていて、カードに書き込む装置等で書きこみをしているのでしょうか?
それとも、シリアル番号の様に最初から番号が決まっているのでしょうか?

カードリーダーの規格は何処で調べられますか?

「ICカード リーダー」で検索すると、Pasoriが出てきます。
しかし、それ以外の会社(例えば、SANWA)でもICカードリーダーを出しています。
https://www.monotaro.com/g/02918455/

おそらく、ICカードを読み込むための共通仕様があると考えているのですが、何処で調べれば良いのでしょうか?

USBのカードリーダーの情報をブラウザで受け取るにはどんな技術を使っているのでしょうか?

前項で、目標のサイトをご共有させていただきましたが、
ブラウザからでも、ICカードリーダーを通してデータを取得すること自体は出来ると言うのはわかりました。

ただ、カードリーダーを繋いだだけでは読み込むだけでなく、ブラウザに読み込ませるためのドライバーがないと実現できないのではないかと思っています。
調べる中で、ChromeのWeb USB APIを使って実現されている方もいらっしゃいますが、単純に繋げるだけでなく、PC側で読み込める様に外部のドライバーをインストールしているのがわかりました。

PasocaのSDKや、参考サイトの仕様を見ると、IEのみとなっていたので、
カードリーダーとそのドライバーが対応していないと、ブラウザ経由でデータを取得する事が出来ないのではないかと感じています。

前述したカードリーダーの規格の話に関わってきますが、
カードリーダーをブラウザで使うための共通ドライバの様なものが存在するのでしょうか?
例えば、個人情報カードをSANWAのカードリーダーでもSoniyのPasoriでもが読み込めるのは共通なドライバーを仕様していると言えるのでしょうか?

実装イメージ

色々お話を聞けたので、実装のイメージが湧いてきました。

環境について

項目 バージョン 備考
PC windows 10以上(厳密には7だと思いますが、サポート期間が近いため)
対応するICカードの規格 FeliCa、FeliCa Lite(S) PC/SCでIDmを取得できる規格に絞りたいため
リーダー Pasori リーダーを絞る必要はないと思うが、PC/SCの対応、非対応があると思うため(FeliCaの時点でないかもしれませんが…)

概要

FeliCaでカードを通すと、通した情報(IDm)をWebサーバーに送信。
データベースを照合して該当するIDmの情報があった場合は、保存処理。

ブラウザでカードを通した人の情報をWebサーバーから取得して表示。

想定されるフロー

その1 データベースに保存

windowsアプリから送信された情報をDBに保存(ハッシュ等のIDと一緒に)。
ブラウザから定期的にサーバーにアクセスして、送信情報を取得。

イメージ説明

もしかしたら、Webサーバーに送信された情報をDBを介さず取得する方法があるかもしれませんが、
自分の知識不足で想像できるのはこの方法です。

思いつくデメリット
  • jsでapiを経由してデータを取得するので、仮に複数の環境で使う場合は、わかる人がやれば送信情報が外から見られる
  • 定期的にアクセスするので、送信量がかなり大きくなる(Lambda等のサーバーレスでAPIを使えば落ちることはないが課金額が大きくなる)
  • 毎回通信を挟むため上記の問題もあるし、リアルタイム性が失われる。

その2 ネイティブアプリで完結させる

windowsアプリで送信、ユーザー情報取得まで行う。
websocketサーバーを経由して取得した情報を渡す。
ブラウザで、データを表示する。

イメージ説明

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+4

カードの種類は何処で調べられますか?

ICカードと言う場合、大きくは「接触型」と「非接触型」の2種類に分けられます。接触型と言うのはVISAやMASTERのクレジットカードのような、版面に接続用の端子がむき出しになっているもので、ICカードリーダーライターに挿入して使います。端子を介してICカードリーダーライターが電力を供給し、通信用の端子でICカードリーダーライターとICカード間で通信を行います。

非接触型はご存知のようにSuicaやPasmoなどのカードで、PasoriのようなICカードリーダーライターに近づけることで使うものです。接触型のカードとは違い、直接接続する端子は無く、ICカードリーダーライターから電波を発し、この電波から造られる電力でICカード側が動き出し、相互の通信も電波で行います。

Suica は「FeliCa Standard」と言う古くからあるSONYのFeliCaの一種で、FeliCa Standardの生のカードに、Suica用の初期化を施したものです。ICカードを使うための初期化は「0次発行」「1次発行」などと呼ばれ、Suicaや個人情報カード共に、これはフォーマットの詳細を知り得る、特定の業者しか行えません。一般人が手に入れられる市販の生のFeliCa Standardカードですと、かなり詳細に仕様書を読み込んでプログラムを作らないと、運用に持っていける1次発行までできないと思います。あくまでSuiCaのようなFeliCa Standardを使いたいのであれば、業者に頼んだ方が確実でしょう。個人情報カードはNFCのTypeBと呼ばれる規格のカードです。ICカード型の運転免許証もそうです。これらは情報が少ないのものあって、取り扱いはかなり困難です。

カードの種類を詳細に理解するには、「NFC」や「FeliCa」などでWEB検索してみてください。ただ、NFCで検索した場合、FeiCaのことを言っているか、もっと広い意味で言っているかを選り分けないと混乱します。日本ではFeliCaがほとんどですが、他の国ではMifare(マイフェア)などが多く使われています。FeliCaでも、SuicaやPasmoなどの交通・課金系で使われるFeliCa Standardと、より簡易で安価で使い易い「FeliCa Lite-S」があります。FeliCa Lite-Sは課金のようなものが無い限り、はるかに簡単に扱えます。

カードリーダーの規格は何処で調べられますか?

ICカードリーダーライターやICカードの規格は、ISO等で決まっているハードウェアやICカードリーダーライターとICカード間の通信仕様を指すことが多いです。
wikipedia - 近距離無線通信
ここでもリンクされているNFCフォーラムなどを覗いてみるのが良いと思いますが、質問さんが今、望まれているのは多分それらではないでしょう。先の回答者YAmaGNZさんが既に書かれていますが、PC/SCであればプログラム開発用として汎用的なものかなと思います。FeliCaのIDmを読むだけであれば有償のSDKを購入することもなく、比較的簡単に実現可能です。

USBのカードリーダーの情報をブラウザで受け取るにはどんな技術を使っているのでしょうか?

ご提示のURL、オレンジタグスさんのhttps://www.orangetags.co.jp/orange_post.htmlの内容を拝見してみると、「GET方式の場合はブラウザが開き、POST方式の場合はブラウザは起動されず、データだけが送信される」旨の記載があります。これから推測するに、SDKのAPIを介して、GET方式の場合は「http://server?cardid=0123456789」のようなフォームのURLでWindows APIのShellExecuteを実行すればWEBブラウザーが起動して送信し、POST形式であればそうはいかないのでSDK内のAPIで自力でHTTP通信して送信しているのだと思われます。この場合、GET方式であればブラウザー側ではレスポンスを表示することができますが、POSTではブラウザーは開かないので使えませんね。SDKのAPIを使って自作のアプリケーションで処理する必要があると思います。

一般的にはこのようなローカルPCのリソースに直接アクセスする製品はWEBブラウザーだけで完結することはなく、デスクトップアプリケーションとして造ります。質問者さんが書いているようにWebUSBを使った例はあり、これは私も拝見し興味深く思ったものではありますが、WebUSB自体まだ先鋭かつ実験的なものだと思うので、詳細が分かるエンジニアが付きっ切りで保守しない限り、安定的な実用には難しいと思います。WEBブラウザーだけでできるかできないかで言ったら、今や前時代的でまったくお勧めはしませんが、ActiveXを使えばInternet Explorerに限りWEBブラウザーで完結できます。

質問に対する回答ではなく、個人的な意見ですが、市販のSDKの採用/不採用も含め、現段階ですとICカードシステムの導入に詳しい業者にコンサルティングのような形で相談した方が理解も導入も速いかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/12 15:49

    > 認識の差異が無いかご確認いただけますと幸いです。

    なぜいきなりjsやAWS Lambda(?)が話に出てきたのか面食らった、と言いますか現段階の論点ではない気がしますが、クライアントPCとサーバー間の関係としてはその1その2共におおむね正しいのではないでしょうか。(完全に正しいかどうかは、すみませんが私の方では責任をもった判断はできません)

    リアルタイム性や課金の心配をされているようですが、同時アクセスするPC端末が数千台とか、1秒あたりのアクセスが数百数千、と言う程でも無いのでしょうから、現段階ではそこまで心配しなくて良い気がしています。もし、それ程の要件や将来性が既に見込まれているのであればそれこそプロの業者さんにご相談いただくか、適切に問題を切り分けられる限り、別の質問を立てるなどしてください。
    私の回答はそもそも質問中の「お聞きしたい事」に注目してそれぞれ回答したつもりのものでしたが、hasshyさんの最終的にやりたい事に合致しないのであれば、少なくとも私の回答とコメントにとらわれる必要は決してありません。

    キャンセル

  • 2019/05/12 16:09

    ご助言いただきありがとうございます。

    お忙しい中、ご確認いただきありがとうございます。
    貴重なご意見ありがとうございます。
    また、質問の内容から脱線してしまいました。
    大変失礼いたしました。

    > リアルタイム性や課金の心配をされているようですが、同時アクセスするPC端末が数千台とか、1秒あたりのアクセスが数百数千、と言う程でも無いのでしょうから、現段階ではそこまで心配しなくて良い気がしています。もし、それ程の要件や将来性が既に見込まれているのであればそれこそプロの業者さんにご相談いただくか、適切に問題を切り分けられる限り、別の質問を立てるなどしてください。

    ご説明ありがとうございます。
    おっしゃる通り、問題を細分化して、対処の仕方を考えていくべきですね。

    ご教示いただきありがとうございます。

    キャンセル

  • 2019/05/12 16:22 編集

    一点だけすみません。リアルタイム性云々に関しては最初はWebSocketとHTTPを比較して私から述べたことでした、大変失礼しました。

    キャンセル

+3

Q1.カードの種類は何処で調べられますか?
こちらにRC-S380/Sについての仕様が載っていますので確認してください。
RC-S380と対応カードは同じだと思いますが、詳しくはSonyへ確認してください。
Pasoriだけではなくほかのメーカーのカードリーダでも対応カードはあまり変わらないと思います。
但し、セキュリティ性の高いFelicaの相互認証などには対応していないと思われます。(Pasoriも対応していなかったかと思います)

ICカードに関してはどの種類のカードもシリアル番号みたいなものが最初からあり、それによって個々のカードの識別が可能と思っていて問題ないと思います。

カードの種類の選定は、システムの規模やカード単価など考えて決定されればよろしいかと思います。

他のカードリーダとして挙げておられるサンワのADR-MNICUBKですが、これは接触型ICカードのものでFelicaなどの非接触型ICカードには対応していません。

Q2.カードリーダーの規格は何処で調べられますか?
カードを読み書きするための規格としては「PC/SC」について調査されるとよろしいかと思います。

Q3.USBのカードリーダーの情報をブラウザで受け取るにはどんな技術を使っているのでしょうか?
こちらに関しては、私は知識がないのでお答えすることが出来ません。
ただ、最初にやりたいこととして挙げていらっしゃるところに開発キットがあるようですから、それを利用されることも検討されてはどうでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/11 19:03

    ご回答いただきありがとうございます。
    他の方のご助言も合わせて読んでいく中で、非接触型と接触型によってリーダーが違う事がわかってきました。
    仕様を固めるためには、開発キットの導入や他の方もおっしゃっていた様に、
    コンサルを入れるべきかもしれませんね。

    キャンセル

+2

ズバリこちらです。

ブラウザで(WebUSBもActiveXも使わずに)FeliCaリーダーを読み込む

追記:

USBのカードリーダーの情報をブラウザで受け取るにはどんな技術を使っているのでしょうか?

ブラウザからPCに接続されたUSB機器などにアクセスし制御することは、通常できないことでした。
あえてやるとすれば、ActiveXを使用する方法がありますが

  • IEでしか動かない
  • ブラウザからほとんど無制限にPCを制御できる
  • レガシーな技術であり、将来性がない

点から、新規開発で採用する例はほとんどありません。

また、最近ではブラウザでUSBを制御するWebUSBという技術が登場しましたが
JavaScriptという高レベルなレイヤーを扱う言語で、機械制御という低レベルな内容を扱うものであり
個人的にはActiveX同様のいびつさを感じます。
(JavaScriptが低レベルな内容に向かないかどうかについては、意見の分かれるところでしょうが)

そこで、上記リンクですが
ネイティブアプリ側で低レベルな実装を済ませ、ブラウザからはネイティブアプリに用意したAPIを叩く
という内容であり、あたかもウェブアプリケーションの一機能としてマイクロサービスを呼び出すような、自然な実装となっています。

追記2:

既にベストアンサーがついていますが、一応私の実装イメージを載せておきますね。

イメージ説明

上記のように、reader.exeから取得した内容を、ブラウザを介してサーバーに送信することで
カード情報をブラウザから送信される情報の一つとして扱うことができ、
特殊な構成をすることなく、Webアプリにカード読込の機能を持たせることが出来ます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/11 22:00 編集

    こちらの方法で世に出ているサービスは殆どありませんが、少ない例として以下のWeb印刷機能があります。
    https://www.jbcc.co.jp/products/soft/print/printpro20/index.html
    (特許出願中と書かれておりますが、拒絶査定が出ています。安心して利用できます。)

    キャンセル

  • 2019/05/12 00:15

    度々ありがとうございます!
    拝見させていただきます。

    キャンセル

  • 2019/05/14 23:36 編集

    何時もありがとうございます。
    お忙しい中、実装フローについてご教示いただきありがとうございます。
    確認させて頂きました。

    確かに、おっしゃる通りwindowsアプリでネットを介する処理をつけて複雑にする必要もありませんね。
    (内部的な事で恐縮ですが)ブラウザ側では、非同期でデータをやり取りしようと思っており、直接入力も受け付ける予定です。
    そこの仕様に合わせる上でもこの実装方法が良いのかもしれません。

    ありがとうございます。
    とても勉強になりました。

    キャンセル

+1

余り詳しくありませんが、
各メーカーのライブラリを使うかシリアル通信(RS-232c、USB)、LAN通信などの電文のやりとりで行います。
こう言った形式の電文を送ると数字を読み取りますとか、書き込みますとか、モードを変更しますとか、
ブザーを鳴らしますとかそういった仕様があります。
確かにメーカー独自のコマンド電文とRFID共通のコマンドなのかなと思うようなものもありました。
個人利用の様なお手軽に使えるものがどの程度あるか分かりませんが、多くは購入時に
付属されるか通信プロトコルの仕様を知る事が出来るレベルなのかもしれません。
また、メーカー直には販売していない所もあり代理店のなどを通して販売されるケースもあります。

ICカードは中身はテキサスインスツルメンツやNXPセミコンダクターなどのメーカーで外の外観はカード型やボタン型、商品タグのラベルなどがありこれらはまた別の会社でパッケージされている場合も多いです。

また、ICチップにはどのメーカーとも重複しないユニークなID(UID)があります。
他にもバッシブ型、アクティブ型、方式も電磁誘導型、電波型、一括読取のアンチコリジョンなどありますので調べてみてください。

また、電磁誘導(13.56MHzなど)は外部のノイズを多く受ける印象がありました。よって、交信距離が小さくなるので近づけないと読めない。工場などでガチャガチャ制御していない所でしたら問題無いと思いますが・・・。
最近では村田製作所が金属に強い物を作られたらしいですが、対策されていないものだと金属にも弱いです。

秋月電子の様な電子部品屋さんに何も記録されていないカードが売っていて、カードに書き込む装置等で書きこみをしているのでしょうか?

カードに書き込む装置をRFIDリーダーライターと言いますが、sonyのサイトで調べられている装置です。

カードの種類について理解を深めたいです。

Tag-it Plus、Mifare、I-CODE SLI、Felicaという種類の事ですか?
ICカードの方は個人でもまだ比較的手に入りやすいのではないでしょうか?私は個人で手に入れたことはないですが。会社ですとRFIDリーダーライターとICタグをメーカーか代理店でとりひきされたほうが
また、カード型やボタン型などのパッケージされたものもありますが、インレットと言ってチップとアンテナが見えるシール型もあります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/11 18:43

    ご返答いただきありがとうございます。
    知識が乏しく、質問が不透明で申し訳ありません。

    カードの構造と種類についてご説明いただきありがとうございます。
    調べるための情報を得られました。

    ICカードでタッチするシステムを作りたいではなく、
    どの仕様のカードを読み込めるシステムを作りたいかと、
    そのカードの発行方法をについて細かく仕様を固めないといけませんね。

    キャンセル

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

  • ただいまの回答率 89.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる