Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
BAM Checkout Mobile Implementation Guide for Android This is a reference manual and configuration guide for the BAM Checkout Mobile product. It illustrates how to embed credit card and optional ID scanning into your app. Copyright: Jumio Inc. 268 Lambert Avenue, Palo Alto, CA 94306 Contents BAM Checkout Mobile Implementation Guide for Android ...................................................... 1 Contents.................................................................................................................................. 2 Release notes ...................................................................................................................... 3 Contact ................................................................................................................................ 3 Credit card scanning ................................................................................................................... 4 Setup ....................................................................................................................................... 4 Architecture ........................................................................................................................ 5 Integration .............................................................................................................................. 5 Initializing the SDK .............................................................................................................. 6 Configuring the SDK ............................................................................................................ 6 Localizing labels................................................................................................................... 8 Customizing look and feel ................................................................................................... 8 Displaying the SDK .............................................................................................................. 8 Retrieving information ........................................................................................................ 9 Credit Card Retrieval API ...................................................................................................... 12 Two-factor authentication .................................................................................................... 12 ID scanning ............................................................................................................................... 13 Setup ..................................................................................................................................... 13 Architecture ...................................................................................................................... 14 Integration ............................................................................................................................ 14 Initializing the SDK ............................................................................................................ 15 Configuring the SDK .......................................................................................................... 16 Localizing labels................................................................................................................. 17 Customizing look and feel ................................................................................................. 18 Displaying the SDK ............................................................................................................ 18 Retrieving information (Fastfill) ........................................................................................ 18 Two-factor authentication .................................................................................................... 21 2 Release notes The current version of the Jumio SDK is 2.0.1. Visit BAM Checkout Mobile Release Notes to see additions, changes and fixes included in each release. Contact If you have any questions regarding our implementation guide please contact Jumio Customer Service at [email protected] or https://support.jumio.com. The Jumio online helpdesk contains a wealth of information regarding our service including demo videos, product descriptions, FAQs and other things that may help to get you started with Jumio. Check it out at: https://support.jumio.com. 3 Credit card scanning Setup The requirements for the SDK are: Android 4.1 (API level 16) or higher ARMv7 processor with Neon, ARM64-v8a Internet connection Required permissions are linked automatically by the SDK. The following permissions are optional: <uses-permission android:name="android.permission.VIBRATE"/> <uses-feature android:name="android.hardware.camera" android:required="false"/> Note: On devices running Android Marshmallow (6.0) you need to acquire android.permissions.CAMERA dynamically before initializing the SDK. Use getRequiredPermissions to get a list of all required dangerous permissions. public static String[] getRequiredPermissions(); Using the SDK requires an activity declaration in your AndroidManifest.xml. <activity android:theme="@style/Theme.Bam" android:hardwareAccelerated="true" android:name="com.jumio.bam.BamActivity" android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"/> You can specify your own theme (see Customizing look and feel chapter). The orientation can be sensor based or locked with the attribute android:screenOrientation. If you are using Proguard, add the following lines in its configuration. -keep class com.jumio.** { *; } -keep class jumio.** { *; } 4 Architecture You can filter which architecture to use by specifying the abiFilters. Note: The abiFilters command in the ndk closure affects the Google Play Store filtering. defaultConfig { ndk { abiFilters "armeabi","armeabi-v7a","arm64-v8a","mips","mips64"","x86", "x86_64" } } The apk can be splitted based on the architecture if multiple apks should be uploaded to the Google Play Store. Google Play Store manages to deliver the appropriate apk for the device. splits { abi { enable true reset() include "armeabi","armeabi-v7a","arm64-v8a","mips","mips64","x86", "x86_64" universalApk false } } Note: You get an UnsatisfiedLinkError, if the app and the CPU architecture do not match. Integration Use the SDK in your application by including the Maven repository with the following build.gradle configuration in Android Studio: repositories { maven { url 'http://mobile-sdk.jumio.com' } } Dependencies Dependency Mandatory x x x x x com.jumio.android:core:2.0.1@aar com.jumio.android:bam:2.0.1@aar com.android.support:appcompat-v7:23.3.0 com.android.support:support-v4:23.3.0 com.squareup.okhttp:okhttp:2.7.5 com.jumio.android:javadoc:2.0.1 Description Jumio Core library Bam library Android native library Android native library HTTP client Android native library If an optional module is not linked, the scan method is not available but the library size is reduced. 5 Note: If you use credit card and ID scanning in your app, add the following dependencies: Dependency Mandatory x x com.jumio.android:nv:2.0.1@aar com.android.support:design:23.3.0 com.jumio.android:nv-barcode:2.0.1@aar com.jumio.android:nv-mrz:2.0.1@aar com.jumio.android:nv-nfc:2.0.1@aar com.madgag.spongycastle:prov:1.54.0.0 net.sf.scuba:scuba-sc-android:0.0.9 com.jumio.android:nv-ocr:2.0.1@aar Description Netverify library Android native library US / CAN Barcode Scanning MRZ Scanning ePassport Scanning ePassport Scanning ePassport Scanning Template Matcher Applications implementing the SDK shall not run on rooted devices1. Use either the below method or a self-devised check to prevent usage of SDK scanning functionality on rooted devices. BamSDK.isRooted(); Call the method isSupportedPlatform to check if the device is supported. BamSDK.isSupportedPlatform(); Check the Android Studio sample projects to learn the most common use. Initializing the SDK To create an instance of the SDK, perform the following call right before presenting the SDK's view controller. BamSDK bamSDK = BamSDK.create(yourActivity, "YOURAPITOKEN", "YOURAPISECRET", "YOURREPORTINGCRITERIA", JumioDataCenter.US); Make sure that your merchant API token and API secret are correct, specify an instance of your activity and provide a reference to identify the scans in your reports (max. 100 characters or null). If your merchant account is in the EU data center, use JumioDataCenter.EU instead. Note: Log into your Jumio merchant backend, and you can find your merchant API token and API secret on the "Settings" page under "API credentials". We strongly recommend you to store credentials outside your app. Configuring the SDK Note: User journey related configurations do not apply for the custom scan view. 1 In case of doubt, please consult a PCI QSA (Qualified Security Assessor). 6 Overwrite your specified reporting criteria to identify each scan attempt in your reports (max. 100 characters). bamSDK.setMerchantReportingCriteria("YOURREPORTINGCRITERIA"); To restrict supported card types, pass an ArrayList of CreditCardTypes to the setSupportedCreditCardTypes method. ArrayList<CreditCardType> creditCardTypes = new ArrayList<CreditCardType>(); creditCardTypes.add(CreditCardType.VISA); creditCardTypes.add(CreditCardType.MASTER_CARD); bamSDK.setSupportedCreditCardTypes(creditCardTypes); You can enable the sort code and account number. The recognition of card holder name, manual entry, expiry recognition and CVV entry are enabled by default and can be disabled. The user can edit the recognized expiry date if setExpiryEditable is enabled. bamSDK.setSortCodeAndAccountNumberRequired(true) bamSDK.setCardHolderNameRequired(false); bamSDK.setManualEntryEnabled(false); bamSDK.setExpiryRequired(false); bamSDK.setCvvRequired(false); bamSDK.setExpiryEditable(true); Use setName to pass first and last name for name match if card holder recognition is enabled. The user can edit the recognized card holder name if setCardHolderNameEditable is enabled. Note: Levenshtein distance is used for name match. You can obtain the match result in the BamCardInformation class. bamSDK.setName("FIRSTNAME LASTNAME"); bamSDK.setCardHolderNameEditable(true); You can set a short vibration and sound effect to notify the user that the card has been detected. bamSDK.setVibrationEffectEnabled(true); bamSDK.setSoundEffect(R.raw.yourSoundFile); Use setCameraPosition to configure the default camera (front or back). bamSDK.setCameraPosition(JumioCameraPosition.FRONT); To enable flashlight after SDK is started, use the following method. bamSDK.setEnableFlashOnScanStart(true); To show the unmasked card number during the user journey, disable the following setting. bamSDK.setCardNumberMaskingEnabled(false); 7 You can add custom fields to "Manual entry" and the confirmation view (keyboard entry or predefined values). bamSDK.addCustomField("idZipCode", "Zip code", "94306", InputType.TYPE_CLASS_NUMBER, "[0-9]{5}"); // addCustomField(String id, String title, String value, int inputType, String regularExpression); bamSDK.addCustomField("idState", "State", "Choose state", yourArrayList, false, "-no value --"); // addCustomField(String id, String title, String hint, ArrayList<String> values, boolean required, String resetValueText); Use the following method to support the Adyen client-side-encryption. To successfully create an encrypted data object, enable expiry date, CVC and card holder name. Note: Transmission of the encrypted object to the Adyen payment gateway is not part of the SDK. bamSDK.setAdyenPublicKey("ADYENPUBLICKEY"); Localizing labels All label texts and button titles can be changed and localized using the standard strings.xml file. Just add the Jumio strings (see sample project under /res/values/strings.xml) and adapt them to your required language. Customizing look and feel The SDK can be customized to fit your application's look and feel by specifying Theme.Bam as a parent style of your own theme. The individual customizing items can be found in attrs.xml. Displaying the SDK To show the SDK, call the respective method below within your activity or fragment. Activity: bamSDK.start(); Fragment: startActivityForResult(bamSDK.getIntent(), BamSDK.REQUEST_CODE); Note: The default request code is 100. To use another code, override the public static variable BamSDK.REQUEST_CODE before displaying the SDK. Custom scan view To use the custom scan view with a plain card scanning user interface, specify an instance of your class which implements the BamCustomScanInterface and provide an instance of the class BamCustomScanView. You will receive a BamCustomScanPresenter object. Add yourBamCustomScanView to your layout and specify desired layout attributes using either 8 a certain width, and height as wrap_content or a certain height, and width as wrap_content or width and height as match_parent (full screen). Using width or height as wrap_content, the BamCustomScanView attribute ratio needs to be set to any float value between screen width/screen height (e.g. portrait 720/1280 = ~ 0.6) and 4:3 (1.33). If yourBamCustomScanView is added to your layout via xml, specify the below namespace to access the custom attribute yourNameSpace:ratio. BamCustomScanPresenter bamCustomScanPresenter = bamSDK.start(yourBamCustomScanInterface, yourBamCustomScanView); Upon onBamCameraAvailable within yourBamCustomScanInterface, you can perform the following actions using the bamCustomScanPresenter: Check if front and back camera available Check if front camera used Switch between front and back camera Check if flash available Check if flash enabled Switch flash mode (on or off) Stop card scanning public public public public public public public boolean hasMultipleCameras(); boolean isCameraFrontFacing(); void switchCamera(); boolean hasFlash(); boolean isFlashOn(); void toggleFlash(); void stopScan(); Call onActivityPause in your activity upon onPause. public void onActivityPause(); Retrieving information Implement the standard method onActivityResult in your activity for successful scans and user cancellation notifications. Call bamSDK.destroy() once you received the result. You receive a Jumio scan reference for each try, if the Internet connection is available. For offline scans an empty String is added to the Arraylist scanReferences. Call cardInformation.clear() after processing the card information to make sure no sensitive data remains in the device's memory. The parameter EXTRA_ERROR_CODE contains the user cancellation reason. Note: The error codes 200, 210, 220, 240, 250, 260 and 310 will be returned. 9 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == BamSDK.REQUEST_CODE) { // ArrayList<String> scanReferences = data.getStringArrayListExtra(BamSDK.EXTRA_SCAN_ATTEMPTS); if (resultCode == Activity.RESULT_OK) { // OBTAIN PARAMETERS HERE // YOURCODE // cardInformation.clear(); } else if (resultCode == Activity.RESULT_CANCELED) { // int errorCode = data.getIntExtra(BamSDK.EXTRA_ERROR_CODE, 0); // String errorMessage = data.getStringExtra(BamSDK.EXTRA_ERROR_MESSAGE); // YOURCODE } // bamSDK.destroy(); } } Custom scan view Instead of using the standard method onActivityResult, implement the following methods within yourBamCustomScanInterface for camera, extraction and error notifications. Call bamCustomScanPresenter.clearSDK() and bamSDK.destroy() once you received the result. Upon onBamError, you can show the error message and/or call bamCustomScanPresenter.retryScan() if retryPossible. Note: The error codes 200, 210, 220, 240, 260, 300, 310 and 320 will be returned. @Override public void onBamCameraAvailable() { // YOURCODE } @Override public void onBamExtractionStarted() { // YOURCODE like showing a progress indicator } @Override public void onBamExtractionFinished(BamCardInformation cardInformation, ArrayList<String> scanReferences) { // YOURCODE // cardInformation.clear(); // bamCustomScanPresenter.clearSDK(); // bamSDK.destroy(); } @Override public void onBamError(int errorCode, String errorMessage, boolean retryPossible, ArrayList<String> scanReferences) { // YOURCODE like showing the error message and/or calling retry if retryPossible // bamCustomScanPresenter.retryScan(); // bamCustomScanPresenter.clearSDK(); // bamSDK.destroy(); } 10 Class BamCardInformation Parameter Type cardType CreditC ardType cardNumber cardNumberGrouped cardNumberMasked char[] char[] char[] 16 19 19 cardNumberManuallyEntered cardExpiryMonth cardExpiryYear cardExpiryDate boolean char[] char[] char[] 2 2 5 cardCVV cardHolderName char[] char[] 4 100 cardSortCode char[] 8 cardAccountNumber cardSortCodeValid cardAccountNumberValid nameMatch char[] boolean boolean boolean 8 nameDistance encryptedAdyenString int char[] Method clear getCustomField Max. length Description AMERICAN_EXPRESS, CHINA_UNIONPAY, DINERS_CLUB, DISCOVER, JCB, MASTER_CARD, VISA or STARBUCKS Parameter type - Return type - String String Full credit card number Grouped credit card number First 6 and last 4 digits of the grouped credit card number, other digits are masked with "X" True if manual entry, otherwise false Month card expires if enabled and readable Year card expires if enabled and readable Date card expires in the format MM/yy if enabled and readable Entered CVV if enabled Name of the card holder in capital letters if enabled and readable, or as entered if editable Sort code in the format xx-xx-xx or xxxxxx if enabled, available and readable Account number if enabled, available and readable True if sort code valid, otherwise false True if account number code valid, otherwise false True if successful name match (nameDistance <= 20 % of name length), otherwise false Levenshtein distance for name match, otherwise -1 Encrypted ADYEN string Description Clear card information Get entered value for added custom field Error codes Code 200 210 220 240 250 260 280 300 310 320 Message Authentication failed Description API credentials invalid, retry impossible Scanning not available at this time, please contact the app vendor Canceled by end-user The camera is currently not available Resources cannot be loaded, retry impossible No error occurred Camera cannot be initialized, retry impossible End-to-end encryption key not valid anymore, retry impossible Retry possible Cancellation triggered automatically Retry possible Certificate not valid anymore. Please update your application. Your card type is not accepted Background execution is not supported Your card is expired 11 Credit Card Retrieval API You can implement RESTful HTTP GET APIs to retrieve credit card image and data for a specific scan. Find the Implementation Guide at the link below. http://www.jumio.com/implementation-guides/credit-card-retrieval-api/. Two-factor authentication If you want to enable two-factor authentication for your Jumio merchant backend please contact [email protected]. Once enabled, users will be guided through the setup upon their first login to obtain a security code using the "Google Authenticator" app. 12 ID scanning Setup The requirements for the SDK are: Android 4.1 (API Level 16) or higher ARMv7 processor with Neon, ARM64-v8a Internet connection Required permissions are linked automatically by the SDK. The following permissions are optional: <uses-permission android:name="android.permission.VIBRATE"/> <uses-feature android:name="android.hardware.camera" android:required="false"/> Note: On devices running Android Marshmallow (6.0) you need to acquire android.permissions.CAMERA dynamically before initializing the SDK. Use getRequiredPermissions to get a list of all required dangerous permissions. public static String[] getRequiredPermissions(); Using the SDK requires an activity declaration in your AndroidManifest.xml. <activity android:theme="@style/Theme.Netverify" android:hardwareAccelerated="true" android:name="com.jumio.nv.NetverifyActivity" android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"/> You can specify your own theme (see Customizing look and feel chapter). The orientation is restricted on phones, and sensor based or locked with the attribute android:screenOrientation on tablets. If you are using Proguard, add the following lines in its configuration. -keep class com.jumio.** { *; } -keep class jumio.** { *; } -keepattributes Signature -keepattributes *Annotation* -keep class com.squareup.okhttp.** { *; } -keep interface com.squareup.okhttp.** { *; } -dontwarn com.squareup.okhttp.** -dontwarn okio.** -dontnote If you are using ePassport scanning, following lines are needed: 13 -keep -keep -keep -keep -keep class class class class class -dontwarn -dontwarn -dontwarn -dontwarn net.sf.scuba.smartcards.IsoDepCardService {*;} org.jmrtd.** { *; } net.sf.scuba.** {*;} org.spongycastle.** {*;} org.ejbca.** {*;} java.nio.** org.codehaus.** org.ejbca.** org.spongycastle.** Architecture You can filter which architecture to use by specifying the abiFilters. Note: The abiFilters command in the ndk closure affects the Google Play Store filtering. defaultConfig { ndk { abiFilters "armeabi","armeabi-v7a","arm64-v8a","mips","mips64","x86", "x86_64" } } The apk can be splitted based on the architecture if multiple apks should be uploaded to the Google Play Store. Google Play Store manages to deliver the appropriate apk for the device. splits { abi { enable true reset() include "armeabi","armeabi-v7a","arm64-v8a","mips","mips64","x86", "x86_64" universalApk false } } Note: You get an UnsatisfiedLinkError, if the app and the CPU architecture do not match. Integration Use the SDK in your application by including the Maven repository with the following build.gradle configuration in Android Studio: repositories { maven { url 'http://mobile-sdk.jumio.com' } } 14 Dependencies Dependency Mandatory x x x x x x com.jumio.android:core:2.0.1@aar com.jumio.android:nv:2.0.1@aar com.android.support:appcompat-v7:23.3.0 com.android.support:support-v4:23.3.0 com.android.support:design:23.3.0 com.squareup.okhttp:okhttp:2.7.5 com.jumio.android:javadoc:2.0.1 com.jumio.android:nv-barcode:2.0.1@aar com.jumio.android:nv-mrz:2.0.1@aar com.jumio.android:nv-nfc:2.0.1@aar com.madgag.spongycastle:prov:1.54.0.0 net.sf.scuba:scuba-sc-android:0.0.9 com.jumio.android:nv-ocr:2.0.1@aar Description Jumio Core library Netverify library Android native library Android native library Android native library HTTP client Android native library US / CAN Barcode Scanning MRZ Scanning ePassport Scanning ePassport Scanning ePassport Scanning Template Matcher If an optional module is not linked, the scan method is not available but the library size is reduced. Note: If you use Netverify and BAM Checkout in your app, add the following dependency: compile "com.jumio.android:bam:2.0.1@aar" Call the method isSupportedPlatform to check if the device is supported. NetverifySDK.isSupportedPlatform(); Check the Android Studio sample projects to learn the most common use. Initializing the SDK To create an instance for the SDK, perform the following call as soon as your activity is initialized. NetverifySDK netverifySDK = NetverifySDK.create(yourActivity, "YOURAPITOKEN", "YOURAPISECRET", JumioDataCenter.US); Make sure that your merchant API token and API secret are correct and specify an instance of your activity. If your merchant account is in the EU data center, use JumioDataCenter.EU instead. Note: Log into your Jumio merchant backend, and you can find your merchant API token and API secret on the "Settings" page under "API credentials". We strongly recommend you to store credentials outside your app. 15 Configuring the SDK Use the following method to pass first and last name for name match. Note: Levenshtein distance is used for name match. You can obtain the match result in the NetverifyDocumentData class. netverifySDK.setName("FIRSTNAME LASTNAME"); User journey Use setCameraPosition to configure the default camera (front or back). netverifySDK.setCameraPosition(JumioCameraPosition.FRONT); You can specify issuing country (ISO 3166-1 alpha-3 country code), ID type and/or document variant to skip their selection during the scanning process. Note: Fastfill does not support paper IDs, except German ID cards. netverifySDK.setPreselectedCountry("AUT"); netverifySDK.setPreselectedDocumentTypes(NVDocumentType.PASSPORT); netverifySDK.setPreselectedDocumentVariant(NVDocumentVariant.PLASTIC); To pre-select more than one ID type use the following Array: ArrayList<NVDocumentType> documentTypes = new ArrayList<>(); documentTypes.add(NVDocumentType.PASSPORT); documentTypes.add(NVDocumentType.DRIVER_LICENSE); netverifySDK.setPreselectedDocumentTypes(documentTypes); Use the following method to disable the help screen before scanning: netverifySDK.setShowHelpBeforeScan(false); Transaction identifiers The merchant scan reference allows you to identify the scan (max. 100 characters). Note: Must not contain sensitive data like PII (Personally Identifiable Information) or account login. netverifySDK.setMerchantScanReference("YOURSCANREFERENCE"); Use the following property to identify the scan in your reports (max. 100 characters). netverifySDK.setMerchantReportingCriteria("YOURREPORTINGCRITERIA"); You can also set a customer identifier (max. 100 characters). Note: The customer ID should not contain sensitive data like PII (Personally Identifiable Information) or account login. netverifySDK.setCustomerId("CUSTOMERID"); 16 Fastfill only To limit data extraction to be done on device only, enable setDataExtractionOnMobileOnly. netverifySDK.setDataExtractionOnMobileOnly(true); ID verification Enable ID verification to receive a verification status and verified data positions. A callback URL can be specified for individual transactions. This setting overrides your Jumio merchant settings. Note: Not possible for accounts configured as Fastfill only. netverifySDK.setRequireVerification(true); netverifySDK.setCallbackUrl("YOURCALLBACKURL"); You can enable face match during the ID verification for a specific transaction (in case it is enabled for your account). netverifySDK.setRequireFaceMatch(true); ePassport Use setEnableEpassport to read the NFC chip of an ePassport. netverifySDK.setEnableEpassport (true); Analytics Service Use the following setting to explicitly send debug information to Jumio. netverifySDK.setSendDebugInfoToJumio(true); Note: Only set this property to true if you are asked by Jumio Customer Service. You receive a list of the current DebugSessionID by using getDebugID. This method can be called either after initializing or before dismissing the SDK. netverifySDK.getDebugID(); Localizing labels All label texts and button titles can be changed and localized using the standard strings.xml file. Just add the Jumio strings (see sample project under /res/values/strings.xml) and adapt them to your required language. 17 Customizing look and feel The SDK can be customized to fit your application’s look and feel by specifying Theme.Netverify as a parent style of your own theme. The individual customizing items can be found in attrs.xml. Displaying the SDK To show the SDK, call the respective method below within your activity or fragment. Activity: netverifySDK.start(); Fragment: startActivityForResult(netverifySDK.getIntent(), NetverifySDK.REQUEST_CODE); Note: The default request code is 200. To use another code, override the public static variable NetverifySDK.REQUEST_CODE before displaying the SDK. Retrieving information (Fastfill) Implement the standard onActivityResult method in your activity or fragment for successful scans (Activity.RESULT_OK) and user cancellation notifications (Activity.RESULT_CANCELED). Call netverifySDK.destroy() once you received the result. Note: Upon RESULT_CODE_BACK_WITH_SUCCESS, the submission was successful and the back button was pressed on the final screen. protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == NetverifySDK.REQUEST_CODE) { if (resultCode == Activity.RESULT_OK) { // OBTAIN PARAMETERS HERE // YOURCODE } else if (resultCode == Activity.RESULT_CANCELED) { // String scanReference = data.getStringExtra(NetverifySDK.EXTRA_SCAN_REFERENCE); // int errorCode = data.getIntExtra(NetverifySDK.EXTRA_ERROR_CODE, 0); // String errorMessage = data.getStringExtra(NetverifySDK.EXTRA_ERROR_MESSAGE); // YOURCODE } // netverifySDK.destroy(); } } Class NetverifyDocumentData Parameter Type selectedCountry String selectedDocumentType NVDocumentType Max. length 3 18 Description ISO 3166-1 alpha-3 country code as provided or selected PASSPORT, DRIVER_LICENSE or Extraction (*1) IDENTITY_CARD as provided or selected Identification number of the document Personal number of the document Date of issue Date of expiry idNumber String 100 personalNumber String 14 issuingDate expiryDate Date Date issuingCountry String 3 lastName String 100 firstName String 100 middleName String 100 dob Date First name of the customer Middle name of the customer Date of birth gender NVGender Gender M or F originatingCountry String 3 addressLine String 64 Country of origin as ISO 3166-1 alpha-3 country code Street name city String 64 City subdivision String 3 postCode String 15 Last three characters of ISO 3166-2:US state code Postal code mrzData optionalData1 NetverifyMrzData String 50 optionalData2 String 50 nameMatch boolean nameDistance int livenessDetected boolean placeOfBirth extractionMethod String NVExtractionMethod ePassportStatus EPassportStatus 255 19 Country of issue as ISO 3166-1 alpha-3 country code Last name of the customer MRZ data, see table below Optional field of MRZ line 1 Optional field of MRZ line 2 True if successful name match (nameDistance <= 20 % of name length), otherwise false Levenshtein distance for name match, otherwise -1 True if face match enabled for ID verification and liveness detected successfully during scanning, otherwise false; returns null if not performed Place of Birth Extraction method used during scanning Verification status of an MRZ, bar code, OCR MRZ (MRP) Bar code, OCR MRZ, bar code, OCR MRZ, bar code, OCR MRZ, bar code, OCR MRZ, bar code, OCR Bar code, OCR MRZ, bar code, OCR MRZ, bar code, OCR MRZ Bar code, OCR (except passport) Bar code, OCR (except passport) Bar code, OCR (except passport) Bar code, OCR (except passport) MRZ MRZ (TD1) MRZ (TD1, TD2, MRV_A, MRV_B) MRZ (ePassport) MRZ, bar code, OCR ePassport scan VERIFIED (ePassport scanned and authenticated), DENIED (ePassport scanned and not authenticated) or NOT_AVAILABLE (no NFC on device or ePassport feature disabled), NOT_PERFORMED (NFC disabled on device) (*1) Global Netverify settings like accepted/supported IDs and data settings do not apply. Fastfill supported IDs: http://www.jumio.com/fastfill/supported-countries/ MRZ: Value is returned if available on the ID if readable as readable (can be invalid) Bar code: Value is returned if available within the specific bar code OCR: Value is returned if available on the ID if readable as readable (can be invalid) if on the ID's front side, except plastic German ID cards if the region of the selected country fits to the region of the ID (United States, Australia, Asia, Canada, America, Europe, Africa) Class NetverifyMrzData Parameter Type Max. length Description format NVMRZFormat line1 String 50 MRZ line 1 line2 String 50 MRZ line 2 line3 idNumberValid String boolean 50 MRZ line 3 True if ID number check digit is valid, otherwise false dobValid boolean True if date of birth check digit is valid, otherwise false expiryDateValid boolean personalNumberValid boolean True if date of expiry check digit is valid or not available, otherwise false True if personal number check digit is valid or not available, Extraction MRP, TD1, TD2, CNIS MRV_A or MRV_B 20 MRP, TD1, TD2, CNIS, MRV_A, MRV_B MRP, TD1, TD2, CNIS, MRV_A, MRV_B TD1 MRP, TD1, TD2, CNIS, MRV_A, MRV_B MRP, TD1, TD2, CNIS, MRV_A, MRV_B MRP, TD1, TD2, MRV_A, MRV_B MRP compositeValid otherwise false True if composite check digit is valid, otherwise false boolean MRP, TD1, TD2, CNIS Error codes Code 100 110 130 140 150 160 200 210 220 230 240 250 260 270 280 Message We have encountered a network communication problem Description Retry possible, user decided to cancel Authentication failed API credentials invalid, retry impossible No Internet connection available Scanning not available this time, please contact the app vendor Cancelled by end-user The camera is currently not available Retry possible, user decided to cancel Resources cannot be loaded, retry impossible No error occurred Camera cannot be initialized, retry impossible App is in the background and persisted End-to-end encryption key not valid anymore, retry impossible Saving instance is not supported Certificate not valid anymore. Please update your application. Two-factor authentication If you want to enable two-factor authentication for your Jumio merchant backend please contact [email protected]. Once enabled, users will be guided through the setup upon their first login to obtain a security code using the "Google Authenticator" app. 21