FeliCaを利用した認証システム
FeliCaを使用した認証システムを開発しています。
認証方法
(1)PCに個人情報(IDm、名前)の登録を行う。この際、テキストファイル名をIDm(例 01 02 03 05.txt)としファイル内に名前を書き込む。
(2)リーダー/ライターにFeliCaをかざし、IDmを読み取る。
(3)ファイル内の情報を出力させる。
CUIでは、動くのですがGUIで動かすにはどこを替えればいいのでしょうか?
認証というボタン押すと登録された名前を出力させる感じです。
以下にCUIのコードを載せます。
// sample.cpp -*-c++-*-
#include <cstdio>
#include <cstdlib>
#include "felica.h"
int main(void);
void error_routine(void);
void print_vector(char* title, unsigned char* vector, int length);
int main(void)
{
char file[28];
char kawa[6]=".txt";
int i;
FILE *fp;
int ninzu = 0;
char name[100];
//ライブラリの初期化
if (!initialize_library()) {
fprintf(stderr, "Can't initialize library.\n");
return EXIT_FAILURE;
}
//リーダ;ライタの自動認識とオープン
if (!open_reader_writer_auto()) {
fprintf(stderr, "Can't open reader writer.\n");
return EXIT_FAILURE;
}
//ポーリングのための宣言
structure_polling polling;
unsigned char system_code[2] = {0x00, 0x00};
polling.system_code = system_code;
polling.time_slot = 0x00;
unsigned char number_of_cards = 0;
structure_card_information card_information;
unsigned char card_idm[8];
card_information.card_idm = card_idm;
//ポーリングとカード情報の取得
if (!polling_and_get_card_information(&polling, &number_of_cards, &card_information)) {
fprintf(stderr, "Can't find FeliCa.\n");
return EXIT_FAILURE;
}
fprintf(stdout, "number of cards: %d\n", number_of_cards);
print_vector("card IDm:", card_idm, sizeof(card_idm));
//card_idmをfileに書き込む
sprintf(file,"%02x %02x %02x %02x %02x %02x %02x %02x",card_idm[0],card_idm[1],card_idm[2],card_idm[3],card_idm[4],card_idm[5],card_idm[6],card_idm[7]);
for(i=23;i<28;i++)
file[i]=kawa[i-23];
printf("%s\n",file);
if((fp=fopen(file,"r"))==NULL)
printf("情報が登録されていません\n");
else{
while(fscanf(fp,"%s",name)==1){
printf("%-10s\n",name);
ninzu++;
}
fclose(fp);
}
//リーダ。ライタのクローズ
if (!close_reader_writer()) {
fprintf(stderr, "Can't close reader writer.\n");
return EXIT_FAILURE;
}
//リーダ。ライタを開放する
if (!dispose_library()) {
fprintf(stderr, "Can't dispose library.\n");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
void error_routine(void)
{
enumernation_felica_error_type felica_error_type;
enumernation_rw_error_type rw_error_type;
get_last_error_types(&felica_error_type, &rw_error_type);
printf("felica_error_type: %d\n", felica_error_type);
printf("rw_error_type: %d\n", rw_error_type);
close_reader_writer();
dispose_library();
}
void print_vector(char* title, unsigned char* vector, int length)
{
if (title != NULL) {
fprintf(stdout, "%s ", title);
}
int i;
for (i = 0; i < length - 1; i++) {
fprintf(stdout, "%02x ", vector[i]);
}
fprintf(stdout, "%02x", vector[length - 1]);
fprintf(stdout, "\n");
}
どなたかご教授よろしくお願いします。
お礼
なるほど! 分かりやすいご回答ありがとうございました。 つまり、edyなどはチップナンバー(IDmというんですよね)を読み込んで本人認識などの管理をしているのではなく、Felica内のメモリに情報を入れたり、出したりして管理しているということですよね。 ケータイのFelicaを利用したサービスが増えているので、安く何とかならないかなと思いました。 オリジナル機能となるとどうであれ、費用がかさむのであきらめます。 ありがとうございました。
補足
IDmという専門用語を知りましたので、ネット検索してみました。 やはり、edyなどの電子マネーはセキュリティーの問題からメモリを利用しているようですが、私がやりたいような顧客情報を利用する為に(例えばクーポン発行やポイント管理などができるようにする)IDmを取得するアプリは存在するようです。