根据美国机动车管理者协会(AAMVA https://www.aamva.org/DL-ID-Card-Design-Standard/)的规定,美国驾照使用PDF417编码,如下图:
Google Mobile Vision SDK
谷歌服务是支持驾照解析的,可以在Mobile Vision SDK中找到对应的类。要测试驾照识别,可以稍微改造下谷歌的示例代码https://github.com/googlesamples/android-vision/tree/master/visionSamples/barcode-reader。
在onBarcodeDetected(Barcode barcode)
回调中判断barcode类别是否是PDF417
:
if (barcode.format == Barcode.PDF417) {
Barcode.DriverLicense driverLicense = barcode.driverLicense;
if (driverLicense != null) {
Intent intent = new Intent(BarcodeCaptureActivity.this, ResultActivity.class);
intent.putExtra("DriverLicense", driverLicense);
startActivity(intent);
}
}
如果得到了驾照信息,就启动一个新的Activity显示结果:
public class ResultActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setVerticalScrollBarEnabled(true);
tv.setText("");
tv.setMovementMethod(new ScrollingMovementMethod());
Intent intent = getIntent();
if (intent != null) {
Barcode.DriverLicense driverLicense = (Barcode.DriverLicense) intent.getParcelableExtra("DriverLicense");
if (driverLicense != null) {
String documentType = driverLicense.documentType;
tv.append("Document Type:\n" + documentType + "\n\n");
String firstName = driverLicense.firstName;
tv.append("First Name:\n" + firstName + "\n\n");
String middleName = driverLicense.middleName;
tv.append("Middle Name:\n" + middleName + "\n\n");
String lastName = driverLicense.lastName;
tv.append("Last Name:\n" + lastName + "\n\n");
String gender = driverLicense.gender;
tv.append("Gender: \n" + gender + "\n\n");
String addressStreet = driverLicense.addressStreet;
tv.append("Street:\n" + addressStreet + "\n\n");
String addressCity = driverLicense.addressCity;
tv.append("City:\n" + addressCity + "\n\n");
String addressState = driverLicense.addressState;
tv.append("State:\n" + addressState + "\n\n");
String addressZip = driverLicense.addressZip;
tv.append("Zip:\n" + addressZip + "\n\n");
String licenseNumber = driverLicense.licenseNumber;
tv.append("License Number:\n" + licenseNumber + "\n\n");
String issueDate = driverLicense.issueDate;
tv.append("Issue Date:\n" + issueDate + "\n\n");
String expiryDate = driverLicense.expiryDate;
tv.append("Expiry Date:\n" + expiryDate + "\n\n");
String birthDate = driverLicense.birthDate;
tv.append("Birth Date:\n" + birthDate + "\n\n");
String issuingCountry = driverLicense.issuingCountry;
tv.append("Issue Country:\n" + issuingCountry + "\n\n");
}