LibJeIDは各種IDカード内のデータを読み取るための統一されたAPIを提供します。
基本的に以下の流れでカード内データの読み出します。
readFiles()
メソッドを呼び出しFilesオブジェクトの読み出し運転免許証は暗証番号1(PIN1)、暗証番号2(PIN2)を入力して各種データを読み取ります。
共通データ要素
の読み出しに暗証番号の入力は必要ありません。
真正性検証を行うには、PIN1とPIN2の両方を入力する必要があります。
運転免許証を読み取るJavaのサンプルコードです。
try {
JeidReader reader = new JeidReader(nfcTag);
DriverLicenseAP ap = reader.selectDriverLicenseAP();
// 暗証番号1を入力
try {
ap.verifyPin1("XXXX");
} catch (InvalidPinException e) {
if (e.isBlocked()) {
System.out.println("暗証番号1がブロックされています。");
} else {
System.out.println("暗証番号1が間違っています。残り回数: " + e.getCounter());
}
return;
}
// 暗証番号2を入力
try {
ap.verifyPin2("XXXX");
} catch (InvalidPinException e) {
if (e.isBlocked()) {
System.out.println("暗証番号2がブロックされています。");
} else {
System.out.println("暗証番号2が間違っています。残り回数: " + e.getCounter());
}
return;
}
// Filesオブジェクトの読み出し
DriverLicenseFiles files = ap.readFiles();
// Filesオブジェクトから共通データ要素を取得
DriverLicenseCommonData commonData = files.getCommonData();
System.out.println(commonData.toString());
// Filesオブジェクトから券面情報を取得
DriverLicenseEntries entries = files.getEntries();
System.out.println(entries.toString());
// Filesオブジェクトから顔写真を取得
DriverLicensePhoto photo = files.getPhoto();
} catch (IOException e) {
System.out.println("読み取りエラー");
}
運転免許証を読み取るSwiftのサンプルコードです。
do {
let reader = try JeidReader(tag)
let ap = try reader.selectDL()
// 暗証番号1を入力
do {
try ap.verifyPin1("XXXX")
} catch let jeidError as JeidError {
if case .invalidPin(let counter) = jeidError {
if jeidError.isBlocked! {
session.invalidate(errorMessage: "暗証番号1がブロックされています")
} else {
session.invalidate(errorMessage: "暗証番号1が間違っています。残り回数: \(counter)")
}
return
}
}
// 暗証番号2を入力
do {
try ap.verifyPin2("XXXX")
} catch let jeidError as JeidError {
if case .invalidPin(let counter) = jeidError {
if jeidError.isBlocked! {
session.invalidate(errorMessage: "暗証番号2がブロックされています")
} else {
session.invalidate(errorMessage: "暗証番号2が間違っています。残り回数: \(counter)")
}
return
}
}
// Filesオブジェクトの読み出し
let files = try ap.readFiles()
// Filesオブジェクトから共通データ要素を取得
let commonData = try files.getCommonData()
print(commonData.description)
// Filesオブジェクトから券面情報を取得
let entries = try files.getEntries()
print(entries.description)
// Filesオブジェクトから顔写真を取得
let photo = try files.getPhoto()
session.invalidate()
} catch {
session.invalidate(errorMessage: "読み取りエラー")
}
マイナンバーカードの券面入力補助APを読み取るJavaのサンプルコードです。
try {
String pin = "XXXX";
JeidReader reader = new JeidReader(nfcTag);
INTextAP ap = reader.selectINTextAP();
// 暗証番号を入力
try {
ap.verifyPin(pin);
} catch (InvalidPinException e) {
if (e.isBlocked()) {
System.out.println("暗証番号がブロックされています。");
} else {
System.out.println("暗証番号が間違っています。残り回数: " + e.getCounter());
}
return;
}
// Filesオブジェクトの読み出し
INTextFiles files = ap.readFiles();
// Filesオブジェクトから個人番号を取得
INTextMyNumber mynumber = files.getMyNumber();
System.out.println("マイナンバー: " + mynumber.getMyNumber());
// Filesオブジェクトから4属性を取得
INTextAttributes attrs = files.getAttributes();
System.out.println("氏名 : " + attrs.getName());
System.out.println("住所 : " + attrs.getAddr());
System.out.println("生年月日 : " + attrs.getBirth());
System.out.println("性別 : " + attrs.getSexString());
} catch(IOException e) {
System.out.println("読み取りエラー");
}
マイナンバーカードの券面入力補助APを読み取るSwiftのサンプルコードです。
do {
let reader = try JeidReader(tag)
let ap = try reader.selectINText()
// 暗証番号を入力
do {
try ap.verifyPin("XXXX")
} catch let jeidError as JeidError {
if case .invalidPin(let counter) = jeidError {
if jeidError.isBlocked! {
session.invalidate(errorMessage: "暗証番号がブロックされています")
} else {
session.invalidate(errorMessage: "暗証番号が間違っています。残り回数: \(counter)")
}
return
}
}
// Filesオブジェクトの読み出し
let files = try ap.readFiles()
// Filesオブジェクトから個人番号を取得
let mynumber = try files.getMyNumber()
print("マイナンバー: " + mynumber.myNumber!)
// Filesオブジェクトから4属性を取得
let attrs = try files.getAttributes()
print("氏名 : " + attrs.name!)
print("住所 : " + attrs.address!)
print("生年月日 : " + attrs.birthDate!)
print("性別 : " + attrs.sexString!)
session.invalidate()
} catch {
session.invalidate(errorMessage: "読み取りエラー")
}
券面入力補助APの読み出しAPIINTextAP.readFiles()
は入力された暗証番号のアクセス制御に従い、以下の情報を読み出します。
4桁の暗証番号を入力したうえで、読み出すデータを制限したい場合はINTextAP.readFiles()
にパラメーターを指定します。
詳細は下記APIドキュメントを参照してください。
以下は券面入力補助APで4桁の暗証番号を入力して4属性のみを読み出し、真正性検証を行うサンプルコードです。 この場合、カード内の個人番号にはアクセスしません。
try {
JeidReader reader = new JeidReader(nfcTag);
INTextAP ap = reader.selectINTextAP();
// 暗証番号を入力
ap.verifyPin("XXXX");
// 4属性のみを読み出し(個人番号は読み出しません)
INTextFiles files = ap.readFiles(false, true);
// Filesオブジェクトから4属性を取得
INTextAttributes attrs = files.getAttributes();
System.out.println("氏名 : " + attrs.getName());
System.out.println("住所 : " + attrs.getAddr());
System.out.println("生年月日 : " + attrs.getBirth());
System.out.println("性別 : " + attrs.getSexString());
// 4属性のみに対して真正性検証
ValidationParameters param = new ValidationParameters();
param.setValidateMyNumber(false);
param.setValidateAttributes(true);
ValidationResult result = files.validate(param);
System.out.println("検証結果: " + result)
} catch(IOException e) {
System.out.println("読み取りエラー");
}
do {
let reader = try JeidReader(tag)
let ap = try reader.selectINText()
// 暗証番号を入力
try ap.verifyPin("XXXX")
// 4属性のみを読み出し(個人番号は読み出しません)
let files = try ap.readFiles(false, true)
// Filesオブジェクトから4属性を取得
let attrs = try files.getAttributes()
print("氏名 : " + attrs.name!)
print("住所 : " + attrs.address!)
print("生年月日 : " + attrs.birthDate!)
print("性別 : " + attrs.sexString!)
// 4属性のみに対して真正性検証
let params = ValidationParameters()
params.validateMyNumber = false
params.validateAttributes = true
print("検証結果: " + result)
} catch {
session.invalidate(errorMessage: "読み取りエラー")
}
マイナンバーカードの券面APを読み取るJavaのサンプルコードです。
try {
String pin = "XXXX";
JeidReader reader = new JeidReader(nfcTag);
INVisualAP ap = reader.selectINVisualAP();
// 暗証番号を入力
try {
ap.verifyPin(pin);
} catch (InvalidPinException e) {
if (e.isBlocked()) {
System.out.println("PINがブロックされています。");
} else {
System.out.println("PINが間違っています。残り回数: " + e.getCounter());
}
return;
}
// Filesオブジェクトの読み出し
INVisualFiles files = ap.readFiles();
// Filesオブジェクトから個人番号(画像)を取得
INVisualMyNumber myNumber = files.getMyNumber();
// Filesオブジェクトから券面の表面を取得
INVisualEntries entries = files.getEntries();
System.out.println("生年月日 : " + entries.getBirth());
System.out.println("性別 : " + entries.getSexString());
System.out.println("有効期限 : " + entries.getExpire());
} catch(IOException e) {
System.out.println("読み取りエラー");
}
マイナンバーカードの券面APを読み取るSwiftのサンプルコードです。
do {
let reader = try JeidReader(tag)
let ap = try reader.selectINVisual()
// 暗証番号を入力
do {
try ap.verifyPin("XXXX")
} catch let jeidError as JeidError {
if case .invalidPin(let counter) = jeidError {
if jeidError.isBlocked! {
session.invalidate(errorMessage: "PINがブロックされています")
} else {
session.invalidate(errorMessage: "PINが間違っています。残り回数: \(counter)")
}
return
}
}
// Filesオブジェクトの読み出し
let files = try ap.readFiles()
// Filesオブジェクトから個人番号(画像)を取得
let mynumber = try files.getMyNumber()
// Filesオブジェクトから券面の表面を取得
let entries = try files.getEntries()
print("生年月日 : " + entries.birthDate!)
print("性別 : " + entries.sexString!)
print("有効期限 : " + entries.expireDate!)
session.invalidate()
} catch {
session.invalidate(errorMessage: "読み取りエラー")
}
try {
// ユーザー認証用暗証番号
String authPin = "XXXX";
// デジタル署名用パスワード
String signPin = "XXXXXXXX";
JeidReader reader = new JeidReader(nfcTag);
JPKIAP jpki = reader.selectJPKIAP();
// ユーザー認証用証明書を取得
JPKICertificate authCert = jpki.getAuthCert();
// ユーザー認証用鍵で署名
JPKISignature authSignature = jpki.getAuthSignature("SHA1withRSA");
authSignature.update("hello".getBytes());
byte[] signed = authSignature.sign(authPin);
// デジタル署名用証明書を取得
jpki.verifySignPin(signPin);
JPKICertificate signCert = jpki.getSignCert();
// デジタル署名用鍵で署名
JPKISignature signSignature = jpki.getSignSignature("SHA1withRSA");
signSignature.update("hello".getBytes());
signed = signSignature.sign(signPin);
} catch (InvalidPinException e) {
if (e.isBlocked()) {
System.out.println("PINがブロックされています。");
} else {
System.out.println("PINが間違っています。残り回数: " + e.getCounter());
}
} catch (IOException e) {
System.out.println("読み取りエラー");
}
try {
// パスポート番号
String passportNumber = "XXXXXXXXX";
// 生年月日(YYMMDDの6桁)
String birthDate = "YYYYYY";
// 有効期限(YYMMDDの6桁)
String expireDate = "ZZZZZZ";
JeidReader reader = new JeidReader(nfcTag);
PassportAP ap = reader.selectPassportAP();
// EPMRZのインスタンスを生成
EPMRZ mrz = new EPMRZ(passportNumber, birthDate, expireDate);
// Basic Access Control用の鍵交換
try {
ap.startBAC(mrz);
} catch (InvalidBACKeyException e) {
System.out.println("旅券番号、生年月日または有効期限が間違っています");
return;
}
// Filesオブジェクトの読み出し
EPFiles files = ap.readFiles();
// FilesオブジェクトからCommon Dataを取得
EPCommonData commonData = files.getCommonData();
System.out.println(commonData.toString());
// FilesオブジェクトからData Group 1 (MRZの情報)を取得
EPDataGroup1 dg1 = files.getDataGroup1();
System.out.println(dg1.toString());
// FilesオブジェクトからData Group 2 (顔写真)を取得
EPDataGroup2 dg2 = files.getDataGroup2();
} catch (IOException e) {
System.out.println("読み取りエラー");
}
在留カードを読み取るJavaのサンプルコードです。
try {
JeidReader reader = new JeidReader(nfcTag);
ResidenceCardAP ap = reader.selectResidenceCardAP();
// 在留カード番号または特別永住者証明書番号からRCKeyオブジェクトを生成
RCKey rckey = new RCKey("XXXXXXXXXXXX");
// アクセスコントロールの開始
try {
ap.startAC(rckey);
} catch (InvalidACKeyException e) {
System.out.println("在留カード番号または特別永住者証明書番号が間違っています");
return;
}
// Filesオブジェクトの読み出し
RCFiles files = ap.readFiles();
// Filesオブジェクトから券面情報を取得
RCCardEntries entries = files.getCardEntries();
System.out.println(entries.toString());
} catch (Exception e) {
System.out.println("読み取りエラー");
}
在留カードを読み取るSwiftのサンプルコードです。
do {
let reader = try JeidReader(tag)
let ap = try reader.selectRC()
// 在留カード番号または特別永住者証明書番号からRCKeyオブジェクトを生成
let rckey = try RCKey("XXXXXXXXXXXX")
// アクセスコントロールの開始
do {
try ap.startAC(rckey)
} catch JeidError.invalidKey {
session.invalidate(errorMessage: "在留カード番号または特別永住者証明書番号が間違っています")
return
}
// Filesオブジェクトの読み出し
let files = try ap.readFiles()
// Filesオブジェクトから共通データ要素を取得
let commonData = try files.getCommonData()
print(commonData.description)
// Filesオブジェクトから券面情報を取得
let entries = try files.getCardEntries()
print(entries.description)
// Filesオブジェクトから顔写真を取得
let photo = try files.getPhoto()
session.invalidate()
} catch {
session.invalidate(errorMessage: "読み取りエラー")
}