メインコンテンツまでスキップ

顔写真・記載事項の検証

このページでは、Verify SDK を使用して取得したデータを用いて、運転免許証の記載事項(本籍除く)、記載事項(本籍)、顔写真データのパース・検証を行う方法を説明します。

あらかじめAPI の利用開始を完了し、API トークンを取得しておいてください。 また、利用の前に Verify CardInfo API の利用についてお問い合わせください。

シーケンス

アプリとバックエンドの連携

Verify SDK を用いて取得した記載事項(本籍除く)、記載事項(本籍)、写真、電子署名などの情報は、 何らかの方法でバックエンドサーバーに共有してデータのパース・検証を行ってください。

以下の実装例では、アプリとバックエンドの間での連携については省略しています。

要確認

Verify CardInfo API の利用は、必ず バックエンドサーバーを経由して行ってください。 API トークンをアプリケーションに含めて配布することは Verify CardInfo API の不正利用につながるため、絶対に行わないでください

実装例

クライアントライブラリのセットアップ方法は、クライアントライブラリをご参照ください。

package main

import (
"context"
"encoding/base64"
"fmt"
"log"
"net/http"

"buf.build/gen/go/pocketsign/apis/connectrpc/go/pocketsign/cardinfo/v1/cardinfov1connect"
cardinfov1 "buf.build/gen/go/pocketsign/apis/protocolbuffers/go/pocketsign/cardinfo/v1"
"connectrpc.com/connect"
)

var (
// APIエンドポイントを指定します。この値は環境によって異なります。
baseUrl = "https://verify.mock.p8n.app"

// Verify CardInfo APIのトークンです。ご自身のトークンに置き換えてください。
token = "<YOUR_API_TOKEN>"

// Verify SDKによって運転免許証から読み出されたデータです。これらの値は、アプリ上で作成したものを何らかの方法で予め受け取っておいてください。
rawFaceImageContent = "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ZCDfQpKSZjrML3LdvAknkrCU/9n//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////w=="
rawDriversDocumentContent = "EQGQEgo8RkVEISFALk1OExAlNyVQJT8hISVKJWolUiVtFAAVECU3JVAlPyEhJUolaiVSJW0WBzM1OTExMTMXLjRkPGo4KTI8SkQwSzc0RURMbkgqQjxPQkxuIzkjOSM5IzlIVkNPIzEjNCMzIzgYBzUwNTAzMjUZBTk5OTg3GgYkPSROQj4bBzUxMDAzMjMcAB0AHgAfACAQJV0lMSU1OHgwQjBRMHcycSEMMDAyMzk5OTkyODAwIgc1MDAwMDAwIwc1MDUwMzI1JAc1MDAwMDAwJQc1MDAwMDAwJgc1MDAwMDAwJwc1MDAwMDAwKAc1MDAwMDAwKQc1MDAwMDAwKgc1MDAwMDAwKwc1MDAwMDAwLAc1MDAwMDAwLQc1MDAwMDAwLgc1MDAwMDAwLwc1MDAwMDAwMAc1MDAwMDAwMQc1MDAwMDAwMgc1MDAwMDAwMwc1MDUwMzI1/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////w=="
rawRegisteredDomicileContent = "QS40ZDxqOCkyPEpEMEs3NEVETG5IKkI8T0JMbiM5IzkjOSM5SFZDTyMxIzQjMyM4/////////////////////////////////////////////w=="
rawSignatureContent = "sYIBAAqEd0j6ZaYt2e2hACgGpTpYr8KWc1gtrkBFNV7NYJgZ6hY2uIwrUHviyc3Ch/CCq177Y/dv2+ZINs7KdgYElar5ulPO/ngJ7j3iDvNe4BaQM8pCV3ub7B6/tKHrSJJf3zCcqHsnC8xuvnLITgfdLNqENua4WkwbMkvkfA3YDYhfYhkcMgyAn1D/MdSv5Ah8Q4VY54mujpSrWVkhYqo+yUnYugvcTt27k/KqZrQoFdYUoGS9PJe66CNR6yO1CweCXuKD9AvZCTD5sc2GUIRcc0NW57CUzDd7dIZw9tOCoNa0hnSGEIjyHV9g26OcgZREx7eyjw7zFLnFsiBC6BXdfYWyEDM5MzAzMDMwMzAzMDMwMzG0Nk9VPVA4TiBJQ0RMIFJvb3QgQ0EsT1U9UG9ja2V0U2lnbiBJbmMuLE89UDhOLU1PQ0ssQz1KULVgQ049TW9jayBQUFNDLE9VPVBvY2tldFNpZ24gUHVibGljIFNhZmV0eSBDb21taXNzaW9ucyBmb3IgSUNETCxPVT1Qb2NrZXRTaWduIEluYy4sTz1QOE4tTU9DSyxDPUpQthRN32ZYSSGTdOgyCyHJ6ERTSJpRbA=="
)

func run() error {
// Base64をデコードしてバイト列にします。
faceImageContent, err := base64.StdEncoding.DecodeString(rawFaceImageContent)
if err != nil {
return err
}
driversDocumentContent, err := base64.StdEncoding.DecodeString(rawDriversDocumentContent)
if err != nil {
return err
}
registeredDomicileContent, err := base64.StdEncoding.DecodeString(rawRegisteredDomicileContent)
if err != nil {
return err
}
signatureContent, err := base64.StdEncoding.DecodeString(rawSignatureContent)
if err != nil {
return err
}

// 運転免許証パースリクエストを作成します。
request := connect.NewRequest(&cardinfov1.ParseDriversInfoContentRequest{
// 運転免許証から読み出されたデータを設定します。
FaceImageContent: faceImageContent,
DriversDocumentContent: driversDocumentContent,
RegisteredDomicileContent: registeredDomicileContent,
SignatureContent: signatureContent,
})

// リクエストにAPIトークンを設定します。
request.Header().Set("Authorization", "Bearer "+token)

// リクエストにプレビュー版にオプトインするためのヘッダを設定します。
request.Header().Set("X-P8N-OptIn", "PREVIEW")

// APIクライアントを作成します。
client := cardinfov1connect.NewDriversLicenseServiceClient(http.DefaultClient, baseUrl)

// 運転免許証のパースリクエストを送信します。
response, err := client.ParseDriversInfoContent(context.Background(), request)
if err != nil {
return err
}

// 結果を表示します。
fmt.Println("運転免許証情報")
driversInfo := response.Msg.GetDriversInfo()
if driversInfo.GetDriversDocument() != nil {
fmt.Printf("Name: %s\n", driversInfo.GetDriversDocument().GetName())
fmt.Printf("KanaName: %s\n", driversInfo.GetDriversDocument().GetKanaName())
fmt.Printf("DateOfBirth: %s\n", driversInfo.GetDriversDocument().GetDateOfBirth())
fmt.Printf("Address: %s\n", driversInfo.GetDriversDocument().GetAddress())
fmt.Printf("LicenseNumber: %s\n", driversInfo.GetDriversDocument().GetLicenseNumber())
}
if driversInfo.GetRegisteredDomicile() != nil {
fmt.Printf("RegisteredDomicile: %s\n", driversInfo.GetRegisteredDomicile().GetRegisteredDomicile())
}
if driversInfo.GetFaceImage() != nil {
fmt.Printf("FaceImage: %s\n", base64.StdEncoding.EncodeToString(driversInfo.GetFaceImage().GetFaceImage()))
}
return nil
}

func main() {
if err := run(); err != nil {
log.Fatalln(err)
}
}

パース・検証に成功すると、以下のように結果が表示されます。

取得した運転免許証の記載事項(本籍除く)、記載事項(本籍)、写真は、本人確認などに利用できます。

運転免許証情報
Name: 柴田 成洋
KanaName: シバタ ナリヒロ
DateOfBirth: 3591113
Address: 岩手県下閉伊郡田野畑村和野9999番地1438
LicenseNumber: 002399992800
RegisteredDomicile: 岩手県下閉伊郡田野畑村和野9999番地1438
FaceImage: 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
備考

読み出した写真の画像形式はJPEG2000形式となります。利用する際にはJPEG2000形式の画像形式を取り扱えるライブラリを使用してください。


次のステップ

その他、API の詳しい使い方やエラーの詳細等については、API リファレンスをご覧ください。