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");
}
どなたかご教授よろしくお願いします。
お礼
回答頂きありがとうございました。いろいろとリーダーの使用などを調べてみたところ、自分の持っているリーダーはRFIDタグとの通信(書き込み機能等)は全く持っていないことがわかりました。リーダーに近付けたときにぶるぶる震えるバイブレーションは、どうやらFeliCaを読み取ろうとした際に、リーダー側から出る読み取り用の電波を携帯が検知すると、確認のためにそうしているということみたいでした。 SO905i 側にいろいろと機能もあることを教えていただき大変助かりました。