学生証を用いた入退出管理システムを作成した話

<h1>はじめに</h1>
<p>私は情報系の学部に通う大学２回生で、学園祭実行委員会に所属して模擬店の管理・運営支援を行っています。今回、私は効率的な入室管理を行うべくFelica(学生証)を用いた入退出管理システムを作成しました。</p>

https://github.com/TAKAYAMAN2180/Entry-and-exit-time-Improved-management/tree/master

<h1>主に利用した技術</h1>
<h3>Apache POI</h3>

>Apacheソフトウェア財団のプロジェクトで、WordやExcelといったMicrosoft Office形式のファイルを読み書きできる100% Javaライブラリとして提供
>引用：https://ja.wikipedia.org/wiki/Apache_POI

<a href="https://poi.apache.org/">→https://poi.apache.org/</a>
<p>学籍番号とそれに結びつけるデータを保存しているExcelファイルを読み取るために使用しています。


<h3>felicalib</h3>

>USB接続の FeliCa(フェリカ) リーダ PaSoRi(パソリ) を使って、FeliCa にアクセスするためのライブラリです。Suica, Edy, nanaco などの電子マネーへのアクセスなどに使用できます。
>引用：http://felicalib.tmurakam.org/

<a href="http://felicalib.tmurakam.org/">→http://felicalib.tmurakam.org/</a>
<p>学生証から学籍番号を取得するために使用しています。


<h3>Jaxa Swing</h3>

>Swingは、プログラミング言語 Java のGUIツールキットである。Oracle社のJava Foundation Classesの一部であり、同じくJavaの GUI ツールキットである AWT を拡張したもの。Javaプログラムにグラフィカルユーザインタフェース(GUI)を提供するAPIである。
>引用：https://ja.wikipedia.org/wiki/Swing

GUIの実装に使用

<h3>JLayer</h3>

>JLayer is a library that decodes/plays/converts MPEG 1/2/2.5 Layer 1/2/3
(i.e. MP3) in real time for the JAVA(tm) platform. This is a non-commercial project 
and anyone can add his contribution. JLayer is licensed under LGPL (see LICENSE.txt)
>引用：https://github.com/wkpark/JLayer

→https://github.com/wkpark/JLayer
mp3ファイルを再生するために利用


<h1>きっかけ</h1>
<p>学園祭実行委員会では模擬店の責任者向けにガイダンスを開催していました。総出席人数は500人近く、その出席全員の事前の体温提出の確認と入室の記録を入室時にスムーズに行う必要がありました。しかし、その数は手作業で確認するにはあまりにも膨大であったため、「入退出管理システム」を作成しました。<br>また、そもそもFelicaとは、Sonyによって開発された技術で、<a href="https://www.sony.co.jp/Products/felica/about/">Sonyの公式HP</a>には以下のように記載されています。

>駅の改札口で交通系ICカードをタッチしたり、コンビニエンスストアで電子マネーを利用したり。いまや、あちこちで見られる“かざす便利”をつくりだしたのが、ソニーの非接触ICカード技術方式「FeliCa」です。非接触だから、かざすだけで高速データ送受信。さらに、データは何度も書き換えられ、カード本体を再利用できるエコロジーなシステム。厳重なセキュリティーも実現し、公共交通機関の乗車券システムから、電子マネー、マンションの鍵まで幅広い用途で使われています。これからも、Felicity（至福）に由来する名前どおり、「FeliCa」は世の中をもっと便利に楽しく変えていきます
>(https://www.sony.co.jp/Products/felica/about/より引用)

つまり、Felicaはその技術に対応したカードをかざすだけで、データを参照することができる技術です！<br>自分の所属する大学の学生証がFelicaの技術によって作られていることは事前に知っていたため、スムーズに人を管理するためにはどうしたら良いかを考えた際にFelicaの採用を決めました。</p>
<h1>概要</h1>
<p>事前に下のようなExcelファイルを準備し、アプリの開始画面のそのファイルを指定します。

![12121212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699602/9e45f260-0475-17f9-dbb0-e17e952b7674.png)



<p>そして開始のボタンを押すと下のような画面が出てきます。

![qiita7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699602/99e6cd5a-38b3-8985-a95f-aee4f812bd20.png)

<p>ここで大学の学生証をカードリーダー(Felica Pasori ↓ )にかざすことにより、学生証のデータから学籍番号を抽出し、その抽出した学籍番号からその人のデータを参照して、出席時間を記録し、体温記録表の提出の有無を確認していきます。</p>
<a href="https://www.sony.co.jp/Products/felica/consumer/"><img src="https://www.sony.co.jp/Products/felica/consumer/products/img/idx2_RC-S300.jpg"/ alt="pasori"/><br>
非接触ICカードリーダー／ライター PaSoRi（パソリ）</a>

学生証には下のようなデータが含まれてます。
![felica.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699602/fca8593c-c917-29bf-c7ac-7e01731a6af9.png)

※一部モザイク処理を施しています
そのうち、ある番地のデータ(赤枠部)には下のようにShift-JISで「氏名」「学籍番号」が登録されています。
![qiita6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699602/68f33317-6a2a-ccfc-475a-55becef0e210.png)


詳しくは黄枠の部分に学籍番号、青枠の部分に名前が含まれています
![qiita5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699602/58e52ecc-50d4-1d53-cd3c-861e1f96e9cf.png)
※個人情報は伏せています
「32 36 30 30 32 31 30 32 31 30 31 」をShift-JISでデコードすると、「26002102101」となり、「○○ ○○ ○○ ○○ 20 CA D4 C4 」をデコードすると、「○○○○ ハヤト」となり、個人情報が含まれていることが分かります。
ここから得られた学籍番号を事前に登録した責任者のデータを照合して、確認していきます。

<p>そして、体温記録表の提出の有無によって表示が異なります。

![qiita10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699602/abf2f605-39be-8b8e-063a-7da45cb2e788.png)

![qiita11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699602/2ecd1e1e-5de8-2cc8-8e45-93e1fb7ae6b4.png)

<p>また、１人１人のデータ読み取るたびにこんなかんじで学生証の名前のデータと時間を記録していきます。

![BE2116E3-947C-4B93-9F06-011E8EDC2EED.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699602/4fd11fac-a328-006e-f8b2-a7c328783b07.png)


<h1>まとめ</h1>
今回は簡単に私が作成した入退出管理システムの紹介をしていきました。まだまだ課題点も多いので、改善を図っていきたいです。また、これだけではなく、他にも体温記録表を自動で確認するためのプログラムやGASでお問い合わせフォームの自動返信などを実装したりしているので、追々紹介していきます。