accurascan_kyc 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +635 -0
- package/accurascan-kyc.podspec +38 -0
- package/android/build.gradle +118 -0
- package/android/gradle.properties +5 -0
- package/android/src/main/AndroidManifest.xml +18 -0
- package/android/src/main/java/com/accurascankyc/AccurascanKycModule.java +507 -0
- package/android/src/main/java/com/accurascankyc/AccurascanKycPackage.java +28 -0
- package/android/src/main/java/com/accurascankyc/ActivityFaceMatch.java +533 -0
- package/android/src/main/java/com/accurascankyc/BorderTextView.java +82 -0
- package/android/src/main/java/com/accurascankyc/OcrActivity.java +1263 -0
- package/android/src/main/java/com/accurascankyc/OcrResultActivity.java +736 -0
- package/android/src/main/java/com/accurascankyc/ReactNativeJson.java +123 -0
- package/android/src/main/java/com/accurascankyc/UnsafeOkHttpClient.java +57 -0
- package/android/src/main/res/drawable/btn_bg_gray.xml +6 -0
- package/android/src/main/res/drawable/btn_bg_red.xml +6 -0
- package/android/src/main/res/drawable/btn_bg_trasparent_bottom.xml +6 -0
- package/android/src/main/res/drawable/flip_camera_icon.png +0 -0
- package/android/src/main/res/drawable/ic_close.xml +5 -0
- package/android/src/main/res/drawable/round_border_rect.xml +12 -0
- package/android/src/main/res/drawable/splash.png +0 -0
- package/android/src/main/res/drawable-v24/ic_launcher_foreground.png +0 -0
- package/android/src/main/res/drawable-xhdpi/bg_home.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_barcode.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_biometric.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_check.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_liveness.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_result.png +0 -0
- package/android/src/main/res/drawable-xhdpi/ic_scan.png +0 -0
- package/android/src/main/res/drawable-xhdpi/img_button_overlay.png +0 -0
- package/android/src/main/res/layout/activity_ocr_result.xml +18 -0
- package/android/src/main/res/layout/activity_splash.xml +26 -0
- package/android/src/main/res/layout/custom_frame_layout.xml +144 -0
- package/android/src/main/res/layout/ocr_activity.xml +28 -0
- package/android/src/main/res/layout-land/custom_frame_layout.xml +144 -0
- package/android/src/main/res/layout-land/ocr_activity.xml +41 -0
- package/android/src/main/res/menu/menu_land_port.xml +7 -0
- package/android/src/main/res/mipmap-hdpi/logo_loign.png +0 -0
- package/android/src/main/res/mipmap-mdpi/logo_loign.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/ic_document_verified.png +0 -0
- package/android/src/main/res/mipmap-xhdpi/logo_loign.png +0 -0
- package/android/src/main/res/mipmap-xxhdpi/logo_loign.png +0 -0
- package/android/src/main/res/values/colors.xml +31 -0
- package/android/src/main/res/values/strings.xml +42 -0
- package/android/src/main/res/values/styles.xml +191 -0
- package/ios/AccurascanKyc-Bridging-Header.h +2 -0
- package/ios/AccurascanKyc.m +34 -0
- package/ios/AccurascanKyc.swift +649 -0
- package/ios/AccurascanKyc.xcodeproj/project.pbxproj +283 -0
- package/ios/AccurascanKyc.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
- package/ios/FMController.swift +587 -0
- package/ios/LVController.swift +346 -0
- package/ios/MainStoryboard_iPhone.storyboard +338 -0
- package/ios/ViewController.swift +2686 -0
- package/ios/resources/back_icon.png +0 -0
- package/ios/resources/flip_camera_icon.png +0 -0
- package/ios/resources/flip_document_icon.png +0 -0
- package/ios/resources/ic_logo.png +0 -0
- package/lib/commonjs/index.js +13 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/typescript/index.d.ts +3 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/package.json +161 -0
- package/src/index.tsx +5 -0
|
@@ -0,0 +1,2686 @@
|
|
|
1
|
+
|
|
2
|
+
import UIKit
|
|
3
|
+
import AVFoundation
|
|
4
|
+
import AccuraOCR
|
|
5
|
+
|
|
6
|
+
class ViewController: UIViewController {
|
|
7
|
+
|
|
8
|
+
@IBOutlet weak var _viewLayer: UIView!
|
|
9
|
+
@IBOutlet weak var _imageView: UIImageView!
|
|
10
|
+
@IBOutlet weak var _imgFlipView: UIImageView!
|
|
11
|
+
@IBOutlet weak var _lblTitle: UILabel!
|
|
12
|
+
@IBOutlet weak var _constant_height: NSLayoutConstraint!
|
|
13
|
+
@IBOutlet weak var _constant_width: NSLayoutConstraint!
|
|
14
|
+
|
|
15
|
+
@IBOutlet weak var AspectRatio: NSLayoutConstraint!
|
|
16
|
+
@IBOutlet weak var lblOCRMsg: UILabel!
|
|
17
|
+
@IBOutlet weak var lblTitleCountryName: UILabel!
|
|
18
|
+
|
|
19
|
+
@IBOutlet weak var topView: UIView!
|
|
20
|
+
@IBOutlet weak var viewStatusBar: UIView!
|
|
21
|
+
@IBOutlet weak var viewNavigationBar: UIView!
|
|
22
|
+
|
|
23
|
+
@IBOutlet weak var cameraFrame: UIImageView!
|
|
24
|
+
@IBOutlet weak var logoView: UIView!
|
|
25
|
+
|
|
26
|
+
@IBOutlet weak var cameraView1: UIView!
|
|
27
|
+
|
|
28
|
+
@IBOutlet weak var cameraView2: UIView!
|
|
29
|
+
|
|
30
|
+
@IBOutlet weak var cameraView3: UIView!
|
|
31
|
+
@IBOutlet weak var cameraView4: UIView!
|
|
32
|
+
|
|
33
|
+
@IBOutlet weak var backBtn: UIButton!
|
|
34
|
+
@IBOutlet weak var camFlpbtnLbl: UIButton!
|
|
35
|
+
|
|
36
|
+
var accuraErrorCode:NSDictionary = [:]
|
|
37
|
+
var accuraTitleMsg:NSDictionary = [:]
|
|
38
|
+
var isBarcodeEnabled: Bool = false
|
|
39
|
+
var isResultShow = false
|
|
40
|
+
var barcodeData: String = ""
|
|
41
|
+
var isImageView = true
|
|
42
|
+
|
|
43
|
+
var accuraCameraWrapper: AccuraCameraWrapper? = nil
|
|
44
|
+
|
|
45
|
+
var shareScanningListing: NSMutableDictionary = [:]
|
|
46
|
+
|
|
47
|
+
var documentImage: UIImage? = nil
|
|
48
|
+
var docfrontImage: UIImage? = nil
|
|
49
|
+
var camImg: UIImage? = nil
|
|
50
|
+
|
|
51
|
+
var frontImageRotation = ""
|
|
52
|
+
var backImageRotation = ""
|
|
53
|
+
|
|
54
|
+
var docName = "Document"
|
|
55
|
+
var reactViewController:UIViewController? = nil
|
|
56
|
+
|
|
57
|
+
//MARK:- Variable
|
|
58
|
+
var cardid : Int? = 0
|
|
59
|
+
var countryid : Int? = 0
|
|
60
|
+
var imgViewCard : UIImage?
|
|
61
|
+
var isCheckCard : Bool = false
|
|
62
|
+
var isCheckCardMRZ : Bool = false
|
|
63
|
+
var isCheckcardBack : Bool = false
|
|
64
|
+
var isCheckCardBackFrint : Bool = false
|
|
65
|
+
var isCheckScanOCR : Bool = false
|
|
66
|
+
var arrCardSide : [String] = [String]()
|
|
67
|
+
var isCardSide : Bool?
|
|
68
|
+
var isBack : Bool?
|
|
69
|
+
var isFront : Bool?
|
|
70
|
+
var isConnection : Bool?
|
|
71
|
+
var imgViewCardFront : UIImage?
|
|
72
|
+
var dictSecuretyData : NSMutableDictionary = [:]
|
|
73
|
+
var dictFaceDataFront: NSMutableDictionary = [:]
|
|
74
|
+
var dictFaceDataBack: NSMutableDictionary = [:]
|
|
75
|
+
var dictOCRTypeData:NSMutableDictionary = [:]
|
|
76
|
+
var arrBackFrontImage : [UIImageView] = [UIImageView]()
|
|
77
|
+
var isbothSideAvailable = false
|
|
78
|
+
var stUrl : String?
|
|
79
|
+
var arrimgCountData = [String]()
|
|
80
|
+
var cardType: Int? = 0
|
|
81
|
+
var MRZDocType:Int? = 0
|
|
82
|
+
|
|
83
|
+
var arrImageName : [String] = [String]()
|
|
84
|
+
|
|
85
|
+
var dictScanningData:NSDictionary = NSDictionary()
|
|
86
|
+
|
|
87
|
+
var isflipanimation : Bool?
|
|
88
|
+
|
|
89
|
+
var isBarCode = false
|
|
90
|
+
var isChangeMRZ : Bool?
|
|
91
|
+
var imgPhoto : UIImage?
|
|
92
|
+
|
|
93
|
+
var isCheckFirstTime : Bool?
|
|
94
|
+
var mrzElementName: String = ""
|
|
95
|
+
var dictScanningMRZData: NSMutableDictionary = [:]
|
|
96
|
+
var setImage : Bool?
|
|
97
|
+
var isFrontDataComplate: Bool?
|
|
98
|
+
var isBackDataComplate: Bool?
|
|
99
|
+
var stCountryCardName: String?
|
|
100
|
+
var cardImage: UIImage?
|
|
101
|
+
var frameImg: UIImage?
|
|
102
|
+
var isBackSide: Bool?
|
|
103
|
+
|
|
104
|
+
var arrFrontResultKey : [String] = []
|
|
105
|
+
var arrFrontResultValue : [String] = []
|
|
106
|
+
var arrBackResultKey : [String] = []
|
|
107
|
+
var arrBackResultValue : [String] = []
|
|
108
|
+
var isCheckMRZData: Bool?
|
|
109
|
+
var secondCallData: Bool?
|
|
110
|
+
|
|
111
|
+
var isFirstTimeStartCamara: Bool?
|
|
112
|
+
var countface = 0
|
|
113
|
+
var statusBarRect = CGRect()
|
|
114
|
+
var bottomPadding:CGFloat = 0.0
|
|
115
|
+
var topPadding: CGFloat = 0.0
|
|
116
|
+
var callBack: RCTResponseSenderBlock? = nil
|
|
117
|
+
|
|
118
|
+
override func viewDidLoad() {
|
|
119
|
+
|
|
120
|
+
super.viewDidLoad()
|
|
121
|
+
topView.backgroundColor = .clear
|
|
122
|
+
|
|
123
|
+
// let viewController = UIApplication.shared.delegate?.window??.rootViewController
|
|
124
|
+
// viewController?.present(self, animated: true, completion: nil)
|
|
125
|
+
// Do any additional setup after loading the view.
|
|
126
|
+
|
|
127
|
+
statusBarRect = UIApplication.shared.statusBarFrame
|
|
128
|
+
let window = UIApplication.shared.windows.first
|
|
129
|
+
|
|
130
|
+
if #available(iOS 11.0, *) {
|
|
131
|
+
bottomPadding = window!.safeAreaInsets.bottom
|
|
132
|
+
topPadding = window!.safeAreaInsets.top
|
|
133
|
+
} else {
|
|
134
|
+
// Fallback on earlier versions
|
|
135
|
+
}
|
|
136
|
+
let strokeTextAttributes: [NSAttributedString.Key : Any] = [
|
|
137
|
+
.strokeColor : accuraErrorCode["CameraScreen_Text_Border_Color"] as! String != "" ? UIColor(hexString: accuraErrorCode["CameraScreen_Text_Border_Color"] as! String): UIColor.clear,
|
|
138
|
+
.foregroundColor : UIColor(hexString: accuraErrorCode["CameraScreen_Text_Color"] as! String),
|
|
139
|
+
.strokeWidth : -3.0,
|
|
140
|
+
]
|
|
141
|
+
|
|
142
|
+
// if(accuraErrorCode["CameraScreen_Text_Color"] as! String != ""){
|
|
143
|
+
// _lblTitle.textColor = UIColor(hexString: accuraErrorCode["CameraScreen_Text_Color"] as! String)
|
|
144
|
+
// lblOCRMsg.textColor = UIColor(hexString: accuraErrorCode["CameraScreen_Text_Color"] as! String)
|
|
145
|
+
// }
|
|
146
|
+
|
|
147
|
+
if(accuraErrorCode["CameraScreen_Text_Color"] as! String != ""){
|
|
148
|
+
_lblTitle.attributedText = NSAttributedString(string: " ", attributes: strokeTextAttributes)
|
|
149
|
+
lblOCRMsg.attributedText = NSAttributedString(string: " ", attributes: strokeTextAttributes)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if(accuraErrorCode["CameraScreen_Color"] as! String == ""){
|
|
153
|
+
cameraView1.backgroundColor = .clear
|
|
154
|
+
cameraView2.backgroundColor = .clear
|
|
155
|
+
cameraView3.backgroundColor = .clear
|
|
156
|
+
cameraView4.backgroundColor = .clear
|
|
157
|
+
}else{
|
|
158
|
+
cameraView1.backgroundColor = UIColor(hexString: accuraErrorCode["CameraScreen_Color"] as! String)
|
|
159
|
+
cameraView2.backgroundColor = UIColor(hexString: accuraErrorCode["CameraScreen_Color"] as! String)
|
|
160
|
+
cameraView3.backgroundColor = UIColor(hexString: accuraErrorCode["CameraScreen_Color"] as! String)
|
|
161
|
+
cameraView4.backgroundColor = UIColor(hexString: accuraErrorCode["CameraScreen_Color"] as! String)
|
|
162
|
+
}
|
|
163
|
+
if(accuraErrorCode["CameraScreen_Back_Button"] as! Int == 0){
|
|
164
|
+
backBtn.isHidden = true
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if(accuraErrorCode["CameraScreen_Change_Button"] as! Int == 0){
|
|
168
|
+
camFlpbtnLbl.isHidden = true
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
if(accuraErrorCode["isShowLogo"] as! Int == 0){
|
|
173
|
+
logoView.isHidden = true
|
|
174
|
+
}
|
|
175
|
+
if(accuraErrorCode["isFlipImg"] as! Int == 0){
|
|
176
|
+
isImageView = false
|
|
177
|
+
}
|
|
178
|
+
isFirstTimeStartCamara = false
|
|
179
|
+
isCheckFirstTime = false
|
|
180
|
+
if(accuraErrorCode["CameraScreen_Color"] as! String == ""){
|
|
181
|
+
viewStatusBar.backgroundColor = .clear
|
|
182
|
+
viewNavigationBar.backgroundColor = .clear
|
|
183
|
+
}else{
|
|
184
|
+
viewStatusBar.backgroundColor = .clear//UIColor(hexString: accuraErrorCode["CameraScreen_Color"] as! String) //UIColor(red: 231.0 / 255.0, green: 52.0 / 255.0, blue: 74.0 / 255.0, alpha: 1.0)
|
|
185
|
+
viewNavigationBar.backgroundColor = .clear//UIColor(hexString: accuraErrorCode["CameraScreen_Color"] as! String) //UIColor(red: 231.0 / 255.0, green: 52.0 / 255.0, blue: 74.0 / 255.0, alpha: 1.0)
|
|
186
|
+
}
|
|
187
|
+
// viewStatusBar.backgroundColor = UIColor(hexString: accuraErrorCode["CameraScreen_Navigation_Color"] as! String) //UIColor(red: 231.0 / 255.0, green: 52.0 / 255.0, blue: 74.0 / 255.0, alpha: 1.0)
|
|
188
|
+
// viewNavigationBar.backgroundColor = UIColor(hexString: accuraErrorCode["CameraScreen_Navigation_Color"] as! String) //UIColor(red: 231.0 / 255.0, green: 52.0 / 255.0, blue: 74.0 / 255.0, alpha: 1.0)
|
|
189
|
+
_imageView.layer.masksToBounds = false
|
|
190
|
+
_imageView.clipsToBounds = true
|
|
191
|
+
ChangedOrientation()
|
|
192
|
+
var width : CGFloat = 0
|
|
193
|
+
var height : CGFloat = 0
|
|
194
|
+
width = UIScreen.main.bounds.size.width
|
|
195
|
+
height = UIScreen.main.bounds.size.height
|
|
196
|
+
width = width * 0.95
|
|
197
|
+
height = height * 0.35
|
|
198
|
+
|
|
199
|
+
let status = AVCaptureDevice.authorizationStatus(for: .video)
|
|
200
|
+
// frameImg = AccurascanKyc.getImageFromUri(path: accuraErrorCode["setCameraFrame"] as! String)
|
|
201
|
+
// if ((accuraErrorCode["setCameraFrame"] as! String) != "") {
|
|
202
|
+
// cameraFrame.image = frameImg
|
|
203
|
+
// }else{
|
|
204
|
+
if ((accuraErrorCode["CameraScreen_Frame_Color"] as! String) == "") {
|
|
205
|
+
_viewLayer.layer.borderColor = UIColor.white.cgColor
|
|
206
|
+
_viewLayer.layer.borderWidth = 3.0
|
|
207
|
+
}else{
|
|
208
|
+
_viewLayer.layer.borderColor = UIColor(hexString: accuraErrorCode["CameraScreen_Frame_Color"] as! String).cgColor
|
|
209
|
+
_viewLayer.layer.borderWidth = 3.0
|
|
210
|
+
}
|
|
211
|
+
// }
|
|
212
|
+
// _viewLayer.layer.borderColor = UIColor(hexString: accuraErrorCode["CameraScreen_Frame_Color"] as! String).cgColor
|
|
213
|
+
// _viewLayer.layer.borderWidth = 3.0
|
|
214
|
+
|
|
215
|
+
self._imgFlipView.isHidden = true
|
|
216
|
+
if status == .authorized {
|
|
217
|
+
isCheckFirstTime = true
|
|
218
|
+
if isBarCode {
|
|
219
|
+
accuraCameraWrapper = AccuraCameraWrapper.init(delegate: self, andImageView: _imageView, andLabelMsg: self.lblOCRMsg, andurl: 1, isBarcodeEnable: isBarcodeEnabled, countryID: Int32(self.countryid!), setBarcodeType: selectedTypes)
|
|
220
|
+
}else{
|
|
221
|
+
self.setOCRData()
|
|
222
|
+
|
|
223
|
+
}
|
|
224
|
+
let shortTap = UITapGestureRecognizer(target: self, action: #selector(handleTapToFocus(_:)))
|
|
225
|
+
shortTap.numberOfTapsRequired = 1
|
|
226
|
+
shortTap.numberOfTouchesRequired = 1
|
|
227
|
+
self.view.addGestureRecognizer(shortTap)
|
|
228
|
+
} else if status == .denied {
|
|
229
|
+
let alert = UIAlertController(title: "AccuraSdk", message: "It looks like your privacy settings are preventing us from accessing your camera.", preferredStyle: .alert)
|
|
230
|
+
let yesButton = UIAlertAction(title: "OK", style: .default) { _ in
|
|
231
|
+
if #available(iOS 10.0, *) {
|
|
232
|
+
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil)
|
|
233
|
+
} else {
|
|
234
|
+
UIApplication.shared.openURL(URL(string: UIApplication.openSettingsURLString)!)
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
alert.addAction(yesButton)
|
|
238
|
+
self.present(alert, animated: true, completion: nil)
|
|
239
|
+
} else if status == .restricted {
|
|
240
|
+
} else if status == .notDetermined {
|
|
241
|
+
AVCaptureDevice.requestAccess(for: .video) { granted in
|
|
242
|
+
if granted {
|
|
243
|
+
self.isCheckFirstTime = true
|
|
244
|
+
self.isFirstTimeStartCamara = true
|
|
245
|
+
DispatchQueue.main.async {
|
|
246
|
+
self._imageView.setNeedsLayout()
|
|
247
|
+
self._imageView.layoutSubviews()
|
|
248
|
+
if self.isBarCode {
|
|
249
|
+
self.accuraCameraWrapper = AccuraCameraWrapper.init(delegate: self, andImageView: self._imageView, andLabelMsg: self.lblOCRMsg, andurl: 1, isBarcodeEnable: self.isBarcodeEnabled, countryID: Int32(self.countryid!), setBarcodeType: self.selectedTypes)
|
|
250
|
+
}else{
|
|
251
|
+
self.setOCRData()
|
|
252
|
+
|
|
253
|
+
}
|
|
254
|
+
if(self.isCheckScanOCR)
|
|
255
|
+
{
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
self.ChangedOrientation()
|
|
259
|
+
self.accuraCameraWrapper?.startCamera()
|
|
260
|
+
}
|
|
261
|
+
let shortTap = UITapGestureRecognizer(target: self, action: #selector(self.handleTapToFocus(_:)))
|
|
262
|
+
shortTap.numberOfTapsRequired = 1
|
|
263
|
+
shortTap.numberOfTouchesRequired = 1
|
|
264
|
+
} else {
|
|
265
|
+
// print("Not granted access")
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
override func viewWillLayoutSubviews() {
|
|
273
|
+
super.viewWillLayoutSubviews()
|
|
274
|
+
self._imageView.setNeedsLayout()
|
|
275
|
+
self._imageView.layoutSubviews()
|
|
276
|
+
self._imageView.layoutIfNeeded()
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
override func viewWillAppear(_ animated: Bool) {
|
|
280
|
+
super.viewWillAppear(animated)
|
|
281
|
+
countface = 0
|
|
282
|
+
self.shareScanningListing.removeAllObjects()
|
|
283
|
+
isBackSide = false
|
|
284
|
+
isCheckMRZData = false
|
|
285
|
+
self.ChangedOrientation()
|
|
286
|
+
if self.accuraCameraWrapper == nil {
|
|
287
|
+
if isBarCode {
|
|
288
|
+
accuraCameraWrapper = AccuraCameraWrapper.init(delegate: self, andImageView: _imageView, andLabelMsg: self.lblOCRMsg, andurl: 1, isBarcodeEnable: isBarcodeEnabled, countryID: Int32(self.countryid!), setBarcodeType: selectedTypes)
|
|
289
|
+
}else{
|
|
290
|
+
self.setOCRData()
|
|
291
|
+
|
|
292
|
+
}
|
|
293
|
+
// setOCRData()
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if isFirstTimeStartCamara!{
|
|
297
|
+
|
|
298
|
+
accuraCameraWrapper?.startCamera()
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
override func viewDidAppear(_ animated: Bool) {
|
|
303
|
+
super.viewDidAppear(animated)
|
|
304
|
+
if !isFirstTimeStartCamara! && isCheckFirstTime!{
|
|
305
|
+
|
|
306
|
+
isFirstTimeStartCamara = true
|
|
307
|
+
accuraCameraWrapper?.startCamera()
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
override func viewDidDisappear(_ animated: Bool) {
|
|
313
|
+
super.viewDidDisappear(animated)
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
override func viewWillDisappear(_ animated: Bool) {
|
|
317
|
+
accuraCameraWrapper?.stopCamera()
|
|
318
|
+
accuraCameraWrapper?.closeOCR()
|
|
319
|
+
accuraCameraWrapper = nil
|
|
320
|
+
_imageView.image = nil
|
|
321
|
+
super.viewWillDisappear(animated)
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
@IBAction func buttonFlipAction(_ sender: UIButton) {
|
|
326
|
+
accuraCameraWrapper?.switchCamera()
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
var selectedTypes: BarcodeType = .all
|
|
330
|
+
func setSelectedTypes(types: String) {
|
|
331
|
+
switch types
|
|
332
|
+
{
|
|
333
|
+
case "ALL FORMATS":
|
|
334
|
+
self.selectedTypes = .all
|
|
335
|
+
case "EAN-8":
|
|
336
|
+
self.selectedTypes = .ean8
|
|
337
|
+
case "EAN-13":
|
|
338
|
+
self.selectedTypes = .ean13
|
|
339
|
+
case "PDF417":
|
|
340
|
+
self.selectedTypes = .pdf417
|
|
341
|
+
case "AZTEC":
|
|
342
|
+
self.selectedTypes = .aztec
|
|
343
|
+
case "CODE 128":
|
|
344
|
+
self.selectedTypes = .code128
|
|
345
|
+
case "CODE 39":
|
|
346
|
+
self.selectedTypes = .code39
|
|
347
|
+
case "CODE 93":
|
|
348
|
+
self.selectedTypes = .code93
|
|
349
|
+
case "DATA MATRIX":
|
|
350
|
+
self.selectedTypes = .dataMatrix
|
|
351
|
+
case "ITF":
|
|
352
|
+
self.selectedTypes = .itf
|
|
353
|
+
case "QR CODE":
|
|
354
|
+
self.selectedTypes = .qrcode
|
|
355
|
+
case "UPC-E":
|
|
356
|
+
self.selectedTypes = .upce
|
|
357
|
+
case "UPC-A":
|
|
358
|
+
self.selectedTypes = .upca
|
|
359
|
+
case "CODABAR":
|
|
360
|
+
self.selectedTypes = .codabar
|
|
361
|
+
default:
|
|
362
|
+
break
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
//MARK:- Other Method
|
|
367
|
+
func setOCRData(){
|
|
368
|
+
arrFrontResultKey.removeAll()
|
|
369
|
+
arrBackResultKey.removeAll()
|
|
370
|
+
arrFrontResultValue.removeAll()
|
|
371
|
+
arrBackResultValue.removeAll()
|
|
372
|
+
dictSecuretyData.removeAllObjects()
|
|
373
|
+
dictFaceDataBack.removeAllObjects()
|
|
374
|
+
dictFaceDataFront.removeAllObjects()
|
|
375
|
+
dictScanningMRZData.removeAllObjects()
|
|
376
|
+
isCheckCard = false
|
|
377
|
+
isCheckcardBack = false
|
|
378
|
+
isCheckCardBackFrint = false
|
|
379
|
+
isflipanimation = false
|
|
380
|
+
imgPhoto = nil
|
|
381
|
+
isFrontDataComplate = false
|
|
382
|
+
isBackDataComplate = false
|
|
383
|
+
|
|
384
|
+
accuraCameraWrapper = AccuraCameraWrapper.init(delegate: self, andImageView: _imageView, andLabelMsg: lblOCRMsg, andurl: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String, cardId: Int32(cardid!), countryID: Int32(countryid!), isScanOCR: isCheckScanOCR, andcardName: docName, andcardType: Int32(cardType!), andMRZDocType: Int32(MRZDocType!))
|
|
385
|
+
accuraCameraWrapper?.setMinFrameForValidate(5)
|
|
386
|
+
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
@IBAction func backAction(_ sender: UIButton) {
|
|
390
|
+
self.dismiss(animated: true)
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
@objc private func ChangedOrientation() {
|
|
394
|
+
var width: CGFloat = 0.0
|
|
395
|
+
var height: CGFloat = 0.0
|
|
396
|
+
|
|
397
|
+
let orientastion = UIApplication.shared.statusBarOrientation
|
|
398
|
+
if(orientastion == UIInterfaceOrientation.portrait) {
|
|
399
|
+
width = UIScreen.main.bounds.size.width * 0.95
|
|
400
|
+
|
|
401
|
+
height = (UIScreen.main.bounds.size.height - (self.bottomPadding + self.topPadding + self.statusBarRect.height)) * 0.35
|
|
402
|
+
// viewNavigationBar.backgroundColor = UIColor(hexString: accuraErrorCode["CameraScreen_Navigation_Color"] as! String)//UIColor(red: 231.0 / 255.0, green: 52.0 / 255.0, blue: 74.0 / 255.0, alpha: 1.0)
|
|
403
|
+
} else {
|
|
404
|
+
|
|
405
|
+
self.viewNavigationBar.backgroundColor = .clear
|
|
406
|
+
height = UIScreen.main.bounds.size.height * 0.62
|
|
407
|
+
width = UIScreen.main.bounds.size.width * 0.51
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
_constant_width.constant = width
|
|
411
|
+
if(self.cardType == 2) {
|
|
412
|
+
self._constant_height.constant = height / 2
|
|
413
|
+
} else {
|
|
414
|
+
self._constant_height.constant = height
|
|
415
|
+
}
|
|
416
|
+
DispatchQueue.main.async {
|
|
417
|
+
UIView.animate(withDuration: 0.1, delay: 0, options: .curveEaseIn, animations: {
|
|
418
|
+
self.view.layoutIfNeeded()
|
|
419
|
+
}) { _ in
|
|
420
|
+
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
@objc func handleTapToFocus(_ tapGesture: UITapGestureRecognizer?) {
|
|
426
|
+
let acd = AVCaptureDevice.default(for: .video)
|
|
427
|
+
if tapGesture!.state == .ended {
|
|
428
|
+
let thisFocusPoint = tapGesture!.location(in: _viewLayer)
|
|
429
|
+
let focus_x = Double(thisFocusPoint.x / _viewLayer.frame.size.width)
|
|
430
|
+
let focus_y = Double(thisFocusPoint.y / _viewLayer.frame.size.height)
|
|
431
|
+
if acd?.isFocusModeSupported(.autoFocus) ?? false && acd?.isFocusPointOfInterestSupported != nil {
|
|
432
|
+
do {
|
|
433
|
+
try acd?.lockForConfiguration()
|
|
434
|
+
|
|
435
|
+
if try acd?.lockForConfiguration() != nil {
|
|
436
|
+
acd?.focusMode = .autoFocus
|
|
437
|
+
acd?.focusPointOfInterest = CGPoint(x: CGFloat(focus_x), y: CGFloat(focus_y))
|
|
438
|
+
acd?.unlockForConfiguration()
|
|
439
|
+
}
|
|
440
|
+
} catch {
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
func flipAnimation() {
|
|
447
|
+
DispatchQueue.main.async {
|
|
448
|
+
self._imgFlipView.isHidden = false
|
|
449
|
+
UIView.animate(withDuration: 1.5, animations: {
|
|
450
|
+
UIView.setAnimationTransition(.flipFromLeft, for: self._imgFlipView, cache: true)
|
|
451
|
+
AudioServicesPlaySystemSound(1315)
|
|
452
|
+
}) { _ in
|
|
453
|
+
self._imgFlipView.isHidden = true
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
}
|
|
458
|
+
var mutableArray: NSMutableArray = []
|
|
459
|
+
var keyArr: NSMutableArray = []
|
|
460
|
+
var valueArr: NSMutableArray = []
|
|
461
|
+
func decodework (type: String) -> Bool {
|
|
462
|
+
keyArr.removeAllObjects()
|
|
463
|
+
valueArr.removeAllObjects()
|
|
464
|
+
let Customer_Family_Name = "DCS"
|
|
465
|
+
let Family_Name = "DAB"
|
|
466
|
+
|
|
467
|
+
let Customer_Given_Name = "DCT"
|
|
468
|
+
let Name_Suffix = "DCU"
|
|
469
|
+
let Street_Address_1 = "DAG"
|
|
470
|
+
let City = "DAI"
|
|
471
|
+
let Jurisdction_Code = "DAJ"
|
|
472
|
+
let ResidenceJurisdictionCode = "DAO"
|
|
473
|
+
let MedicalIndicatorCodes = "DBG"
|
|
474
|
+
let NonResidentIndicator = "DBI"
|
|
475
|
+
let SocialSecurityNumber = "DBK"
|
|
476
|
+
let DateOfBirth = "DBL"
|
|
477
|
+
|
|
478
|
+
let Postal_Code = "DAK"
|
|
479
|
+
let Customer_Id_Number = "DAQ"
|
|
480
|
+
let Expiration_Date = "DBA"
|
|
481
|
+
let Sex = "DBC"
|
|
482
|
+
let Customer_Full_Name = "DAA"
|
|
483
|
+
let Customer_First_Name = "DAC"
|
|
484
|
+
let Customer_Middle_Name = "DAD"
|
|
485
|
+
let Street_Address_2 = "DAH"
|
|
486
|
+
let Street_Address_1_optional = "DAL"
|
|
487
|
+
let Street_Address_2_optional = "DAM"
|
|
488
|
+
let Date_Of_Birth = "DBB"
|
|
489
|
+
let NameSuff = "DAE"
|
|
490
|
+
let NamePref = "DAF"
|
|
491
|
+
let LicenseClassification = "DAR"
|
|
492
|
+
let LicenseRestriction = "DAS"
|
|
493
|
+
let LicenseEndorsement = "DAT"
|
|
494
|
+
let IssueDate = "DBD"
|
|
495
|
+
let OrganDonor = "DBH"
|
|
496
|
+
let HeightFT = "DAU"
|
|
497
|
+
let FullName = "DAA"
|
|
498
|
+
let GivenName = "DAC"
|
|
499
|
+
let HeightCM = "DAV"
|
|
500
|
+
let WeightLBS = "DAW"
|
|
501
|
+
let WeightKG = "DAX"
|
|
502
|
+
let EyeColor = "DAY"
|
|
503
|
+
let HairColor = "DAZ"
|
|
504
|
+
let IssueTimeStemp = "DBE"
|
|
505
|
+
let NumberDuplicate = "DBF"
|
|
506
|
+
let UniqueCustomerId = "DBJ"
|
|
507
|
+
let SocialSecurityNo = "DBM"
|
|
508
|
+
let Under18 = "DDH"
|
|
509
|
+
let Under19 = "DDI"
|
|
510
|
+
let Under21 = "DDJ"
|
|
511
|
+
let PermitClassification = "PAA"
|
|
512
|
+
let VeteranIndicator = "DDL"
|
|
513
|
+
let PermitIssue = "PAD"
|
|
514
|
+
let PermitExpire = "PAB"
|
|
515
|
+
let PermitRestriction = "PAE"
|
|
516
|
+
let PermitEndorsement = "PAF"
|
|
517
|
+
let CourtRestriction = "ZVA"
|
|
518
|
+
let InventoryControlNo = "DCK"
|
|
519
|
+
let RaceEthnicity = "DCL"
|
|
520
|
+
let StandardVehicleClass = "DCM"
|
|
521
|
+
let DocumentDiscriminator = "DCF"
|
|
522
|
+
let VirginiaSpecificClass = "DCA"
|
|
523
|
+
let VirginiaSpecificRestrictions = "DCB"
|
|
524
|
+
let PhysicalDescriptionWeight = "DCD"
|
|
525
|
+
let CountryTerritoryOfIssuance = "DCG"
|
|
526
|
+
let FederalCommercialVehicleCodes = "DCH"
|
|
527
|
+
let PlaceOfBirth = "DCI"
|
|
528
|
+
let AuditInformation = "DCJ"
|
|
529
|
+
let StandardEndorsementCode = "DCN"
|
|
530
|
+
let StandardRestrictionCode = "DCO"
|
|
531
|
+
let JurisdictionSpecificVehicleClassificationDescription = "DCP"
|
|
532
|
+
let JurisdictionSpecific = "DCQ"
|
|
533
|
+
let JurisdictionSpecificRestrictionCodeDescription = "DCR"
|
|
534
|
+
let ComplianceType = "DDA"
|
|
535
|
+
let CardRevisionDate = "DDB"
|
|
536
|
+
let HazMatEndorsementExpiryDate = "DDC"
|
|
537
|
+
let LimitedDurationDocumentIndicator = "DDD"
|
|
538
|
+
let FamilyNameTruncation = "DDE"
|
|
539
|
+
let FirstNamesTruncation = "DDF"
|
|
540
|
+
let MiddleNamesTruncation = "DDG"
|
|
541
|
+
let OrganDonorIndicator = "DDK"
|
|
542
|
+
let PermitIdentifier = "PAC"
|
|
543
|
+
|
|
544
|
+
|
|
545
|
+
mutableArray.add(Customer_Full_Name)
|
|
546
|
+
mutableArray.add(Customer_Family_Name)
|
|
547
|
+
mutableArray.add(Family_Name)
|
|
548
|
+
|
|
549
|
+
mutableArray.add(Customer_Given_Name)
|
|
550
|
+
mutableArray.add(Name_Suffix)
|
|
551
|
+
mutableArray.add(Street_Address_1)
|
|
552
|
+
mutableArray.add(City)
|
|
553
|
+
mutableArray.add(Jurisdction_Code)
|
|
554
|
+
mutableArray.add(ResidenceJurisdictionCode)
|
|
555
|
+
mutableArray.add(MedicalIndicatorCodes)
|
|
556
|
+
mutableArray.add(NonResidentIndicator)
|
|
557
|
+
mutableArray.add(SocialSecurityNumber)
|
|
558
|
+
mutableArray.add(DateOfBirth)
|
|
559
|
+
mutableArray.add(VirginiaSpecificClass)
|
|
560
|
+
mutableArray.add(VirginiaSpecificRestrictions)
|
|
561
|
+
mutableArray.add(PhysicalDescriptionWeight)
|
|
562
|
+
mutableArray.add(CountryTerritoryOfIssuance)
|
|
563
|
+
mutableArray.add(FederalCommercialVehicleCodes)
|
|
564
|
+
mutableArray.add(PlaceOfBirth)
|
|
565
|
+
mutableArray.add(AuditInformation)
|
|
566
|
+
mutableArray.add(StandardEndorsementCode)
|
|
567
|
+
mutableArray.add(JurisdictionSpecificVehicleClassificationDescription)
|
|
568
|
+
mutableArray.add(JurisdictionSpecific)
|
|
569
|
+
mutableArray.add(PermitIdentifier)
|
|
570
|
+
mutableArray.add(OrganDonorIndicator)
|
|
571
|
+
mutableArray.add(MiddleNamesTruncation)
|
|
572
|
+
mutableArray.add(FirstNamesTruncation)
|
|
573
|
+
mutableArray.add(FamilyNameTruncation)
|
|
574
|
+
mutableArray.add(HazMatEndorsementExpiryDate)
|
|
575
|
+
mutableArray.add(LimitedDurationDocumentIndicator)
|
|
576
|
+
mutableArray.add(CardRevisionDate)
|
|
577
|
+
mutableArray.add(ComplianceType)
|
|
578
|
+
mutableArray.add(JurisdictionSpecificRestrictionCodeDescription)
|
|
579
|
+
mutableArray.add(StandardRestrictionCode)
|
|
580
|
+
|
|
581
|
+
mutableArray.add(Postal_Code)
|
|
582
|
+
mutableArray.add(Customer_Id_Number)
|
|
583
|
+
mutableArray.add(Expiration_Date)
|
|
584
|
+
mutableArray.add(Sex)
|
|
585
|
+
mutableArray.add(Customer_First_Name)
|
|
586
|
+
mutableArray.add(Customer_Middle_Name)
|
|
587
|
+
mutableArray.add(Street_Address_2)
|
|
588
|
+
mutableArray.add(Street_Address_1_optional)
|
|
589
|
+
mutableArray.add(Street_Address_2_optional)
|
|
590
|
+
mutableArray.add(Date_Of_Birth)
|
|
591
|
+
mutableArray.add(NameSuff)
|
|
592
|
+
mutableArray.add(NamePref)
|
|
593
|
+
mutableArray.add(LicenseClassification)
|
|
594
|
+
mutableArray.add(LicenseRestriction)
|
|
595
|
+
mutableArray.add(LicenseEndorsement)
|
|
596
|
+
mutableArray.add(IssueDate)
|
|
597
|
+
mutableArray.add(OrganDonor)
|
|
598
|
+
mutableArray.add(HeightFT)
|
|
599
|
+
mutableArray.add(FullName)
|
|
600
|
+
mutableArray.add(GivenName)
|
|
601
|
+
mutableArray.add(HeightCM)
|
|
602
|
+
mutableArray.add(WeightLBS)
|
|
603
|
+
mutableArray.add(WeightKG)
|
|
604
|
+
mutableArray.add(EyeColor)
|
|
605
|
+
mutableArray.add(HairColor)
|
|
606
|
+
mutableArray.add(IssueTimeStemp)
|
|
607
|
+
mutableArray.add(NumberDuplicate)
|
|
608
|
+
mutableArray.add(UniqueCustomerId)
|
|
609
|
+
mutableArray.add(SocialSecurityNo)
|
|
610
|
+
mutableArray.add(Under18)
|
|
611
|
+
mutableArray.add(Under19)
|
|
612
|
+
mutableArray.add(Under21)
|
|
613
|
+
mutableArray.add(PermitClassification)
|
|
614
|
+
mutableArray.add(VeteranIndicator)
|
|
615
|
+
mutableArray.add(PermitIssue)
|
|
616
|
+
mutableArray.add(PermitExpire)
|
|
617
|
+
mutableArray.add(PermitRestriction)
|
|
618
|
+
mutableArray.add(PermitEndorsement)
|
|
619
|
+
mutableArray.add(CourtRestriction)
|
|
620
|
+
mutableArray.add(InventoryControlNo)
|
|
621
|
+
mutableArray.add(RaceEthnicity)
|
|
622
|
+
mutableArray.add(StandardVehicleClass)
|
|
623
|
+
mutableArray.add(DocumentDiscriminator)
|
|
624
|
+
|
|
625
|
+
var emptyDictionary = [String: String]()
|
|
626
|
+
var passDict = [String: String]()
|
|
627
|
+
|
|
628
|
+
let fullstrArr = type.components(separatedBy: "\n")
|
|
629
|
+
for object in fullstrArr {
|
|
630
|
+
var str = object as String
|
|
631
|
+
if str.contains("ANSI") {
|
|
632
|
+
let parts = str.components(separatedBy: "DL")
|
|
633
|
+
if parts.count > 1 {
|
|
634
|
+
str = parts[parts.count-1]
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
}
|
|
639
|
+
let count = str.count
|
|
640
|
+
|
|
641
|
+
if count > 3 {
|
|
642
|
+
(str as NSString).substring(with: NSRange(location: 0, length: 3))
|
|
643
|
+
let key = str.index(str.startIndex, offsetBy:3)
|
|
644
|
+
let key1 = String(str[..<key])
|
|
645
|
+
|
|
646
|
+
let indexsd = str.index(str.startIndex, offsetBy: 3)
|
|
647
|
+
let tempstr = str[indexsd...] // "Hello>>>"
|
|
648
|
+
if (tempstr != "NONE") {
|
|
649
|
+
emptyDictionary.updateValue(String(tempstr), forKey: key1)
|
|
650
|
+
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
if((emptyDictionary["DAA"]) != nil) {
|
|
656
|
+
passDict.updateValue(emptyDictionary["DAA"]!, forKey: "FULL NAME: ")
|
|
657
|
+
if(keyArr .contains("FULL NAME: ")) {
|
|
658
|
+
}
|
|
659
|
+
else {
|
|
660
|
+
valueArr.add(emptyDictionary["DAA"]!)
|
|
661
|
+
keyArr.add("FULL NAME: ")
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
if((emptyDictionary["DAB"]) != nil) {
|
|
666
|
+
passDict.updateValue(emptyDictionary["DAB"]!, forKey: "LAST NAME:")
|
|
667
|
+
if(keyArr .contains("LAST NAME:")) {
|
|
668
|
+
}
|
|
669
|
+
else {
|
|
670
|
+
valueArr.add(emptyDictionary["DAB"]!)
|
|
671
|
+
keyArr.add("LAST NAME:")
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
if((emptyDictionary["DAC"]) != nil) {
|
|
678
|
+
passDict.updateValue(emptyDictionary["DAC"]!, forKey: "FIRST NAME:")
|
|
679
|
+
if(keyArr .contains("FIRST NAME: ") ) {
|
|
680
|
+
|
|
681
|
+
}
|
|
682
|
+
else {
|
|
683
|
+
valueArr.add(emptyDictionary["DAC"]!)
|
|
684
|
+
keyArr.add("FIRST NAME: ")
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
|
|
691
|
+
if((emptyDictionary["DAD"]) != nil) {
|
|
692
|
+
passDict.updateValue(emptyDictionary["DAD"]!, forKey: "MIDDLE NAME:")
|
|
693
|
+
if(keyArr .contains("MIDDLE NAME:")) {
|
|
694
|
+
}
|
|
695
|
+
else {
|
|
696
|
+
|
|
697
|
+
valueArr.add(emptyDictionary["DAD"]!)
|
|
698
|
+
keyArr.add("MIDDLE NAME:")
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
if((emptyDictionary["DAE"]) != nil) {
|
|
705
|
+
passDict.updateValue(emptyDictionary["DAE"]!, forKey: "NAME SUFFIX: ")
|
|
706
|
+
if(keyArr .contains("NAME SUFFIX: ")) {
|
|
707
|
+
}
|
|
708
|
+
else {
|
|
709
|
+
|
|
710
|
+
valueArr.add(emptyDictionary["DAE"]!)
|
|
711
|
+
keyArr.add("NAME SUFFIX: ")
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
if((emptyDictionary["DAF"]) != nil) {
|
|
716
|
+
passDict.updateValue(emptyDictionary["DAF"]!, forKey: "NAME PREFIX: ")
|
|
717
|
+
if(keyArr .contains("NAME PREFIX: ")) {
|
|
718
|
+
}
|
|
719
|
+
else {
|
|
720
|
+
|
|
721
|
+
valueArr.add(emptyDictionary["DAF"]!)
|
|
722
|
+
keyArr.add("NAME PREFIX: ")
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
if((emptyDictionary["DAG"]) != nil) {
|
|
727
|
+
passDict.updateValue(emptyDictionary["DAG"]!, forKey: "MAILING STREET ADDRESS1: ")
|
|
728
|
+
if(keyArr .contains("MAILING STREET ADDRESS1: ")) {
|
|
729
|
+
}
|
|
730
|
+
else {
|
|
731
|
+
|
|
732
|
+
valueArr.add(emptyDictionary["DAG"]!)
|
|
733
|
+
keyArr.add("MAILING STREET ADDRESS1: ")
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
}
|
|
737
|
+
|
|
738
|
+
if((emptyDictionary["DAH"]) != nil) {
|
|
739
|
+
passDict.updateValue(emptyDictionary["DAH"]!, forKey: "MAILING STREET ADDRESS2: ")
|
|
740
|
+
if(keyArr .contains("MAILING STREET ADDRESS2: ")) {
|
|
741
|
+
}
|
|
742
|
+
else {
|
|
743
|
+
|
|
744
|
+
valueArr.add(emptyDictionary["DAH"]!)
|
|
745
|
+
keyArr.add("MAILING STREET ADDRESS2: ")
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
if((emptyDictionary["DAI"]) != nil) {
|
|
750
|
+
passDict.updateValue(emptyDictionary["DAI"]!, forKey: "MAILING CITY:")
|
|
751
|
+
if(keyArr .contains("MAILING CITY:")) {
|
|
752
|
+
}
|
|
753
|
+
else {
|
|
754
|
+
|
|
755
|
+
valueArr.add(emptyDictionary["DAI"]!)
|
|
756
|
+
keyArr.add("MAILING CITY:")
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
if((emptyDictionary["DAJ"]) != nil) {
|
|
763
|
+
passDict.updateValue(emptyDictionary["DAJ"]!, forKey: "MAILING JURISDICTION CODE: ")
|
|
764
|
+
if(keyArr .contains("MAILING JURISDICTION CODE: ")) {
|
|
765
|
+
}
|
|
766
|
+
else {
|
|
767
|
+
|
|
768
|
+
valueArr.add(emptyDictionary["DAJ"]!)
|
|
769
|
+
keyArr.add("MAILING JURISDICTION CODE: ")
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
if((emptyDictionary["DAK"]) != nil) {
|
|
775
|
+
passDict.updateValue(emptyDictionary["DAK"]!, forKey: "MAILING POSTAL CODE:")
|
|
776
|
+
if(keyArr .contains("MAILING POSTAL CODE:")) {
|
|
777
|
+
}
|
|
778
|
+
else {
|
|
779
|
+
|
|
780
|
+
valueArr.add(emptyDictionary["DAK"]!)
|
|
781
|
+
keyArr.add("MAILING POSTAL CODE: ")
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
if((emptyDictionary["DAL"]) != nil) {
|
|
788
|
+
passDict.updateValue(emptyDictionary["DAL"]!, forKey: "RESIDENCE STREET ADDRESS1: ")
|
|
789
|
+
if(keyArr .contains("RESIDENCE STREET ADDRESS1: ")) {
|
|
790
|
+
}
|
|
791
|
+
else {
|
|
792
|
+
|
|
793
|
+
valueArr.add(emptyDictionary["DAL"]!)
|
|
794
|
+
keyArr.add("RESIDENCE STREET ADDRESS1: ")
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
if((emptyDictionary["DAM"]) != nil) {
|
|
799
|
+
passDict.updateValue(emptyDictionary["DAM"]!, forKey: "RESIDENCE STREET ADDRESS2: ")
|
|
800
|
+
if(keyArr .contains("RESIDENCE STREET ADDRESS2: ")) {
|
|
801
|
+
}
|
|
802
|
+
else {
|
|
803
|
+
|
|
804
|
+
valueArr.add(emptyDictionary["DAM"]!)
|
|
805
|
+
keyArr.add("RESIDENCE STREET ADDRESS2: ")
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
if((emptyDictionary["DAN"]) != nil) {
|
|
810
|
+
passDict.updateValue(emptyDictionary["DAN"]!, forKey: "RESIDENCE CITY: ")
|
|
811
|
+
if(keyArr .contains("RESIDENCE CITY: ")) {
|
|
812
|
+
}
|
|
813
|
+
else {
|
|
814
|
+
|
|
815
|
+
valueArr.add(emptyDictionary["DAN"]!)
|
|
816
|
+
keyArr.add("RESIDENCE CITY: ")
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
if((emptyDictionary["DAO"]) != nil) {
|
|
821
|
+
passDict.updateValue(emptyDictionary["DAO"]!, forKey: "RESIDENCE JURISDICTION CODE: ")
|
|
822
|
+
if(keyArr .contains("RESIDENCE JURISDICTION CODE: ")) {
|
|
823
|
+
}
|
|
824
|
+
else {
|
|
825
|
+
|
|
826
|
+
valueArr.add(emptyDictionary["DAO"]!)
|
|
827
|
+
keyArr.add("RESIDENCE JURISDICTION CODE: ")
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
if((emptyDictionary["DAP"]) != nil) {
|
|
833
|
+
passDict.updateValue(emptyDictionary["DAP"]!, forKey: "RESIDENCE POSTAL CODE: ")
|
|
834
|
+
if(keyArr .contains("RESIDENCE POSTAL CODE: ")) {
|
|
835
|
+
}
|
|
836
|
+
else {
|
|
837
|
+
|
|
838
|
+
valueArr.add(emptyDictionary["DAP"]!)
|
|
839
|
+
keyArr.add("RESIDENCE POSTAL CODE: ")
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
if((emptyDictionary["DAQ"]) != nil) {
|
|
845
|
+
passDict.updateValue(emptyDictionary["DAQ"]!, forKey: "LICENCE OR ID NUMBER: ")
|
|
846
|
+
if(keyArr .contains("LICENCE OR ID NUMBER: ")) {
|
|
847
|
+
}
|
|
848
|
+
else {
|
|
849
|
+
|
|
850
|
+
valueArr.add(emptyDictionary["DAQ"]!)
|
|
851
|
+
keyArr.add("LICENCE OR ID NUMBER: ")
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
if((emptyDictionary["DAR"]) != nil) {
|
|
856
|
+
passDict.updateValue(emptyDictionary["DAR"]!, forKey: "LICENCE CLASSIFICATION CODE: ")
|
|
857
|
+
if(keyArr .contains("LICENCE CLASSIFICATION CODE: ")) {
|
|
858
|
+
}
|
|
859
|
+
else {
|
|
860
|
+
|
|
861
|
+
valueArr.add(emptyDictionary["DAR"]!)
|
|
862
|
+
keyArr.add("LICENCE CLASSIFICATION CODE: ")
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
if((emptyDictionary["DAS"]) != nil) {
|
|
867
|
+
passDict.updateValue(emptyDictionary["DAS"]!, forKey: "LICENCE RESTRICTION CODE: ")
|
|
868
|
+
if(keyArr .contains("LICENCE RESTRICTION CODE: ")) {
|
|
869
|
+
}
|
|
870
|
+
else {
|
|
871
|
+
|
|
872
|
+
valueArr.add(emptyDictionary["DAS"]!)
|
|
873
|
+
keyArr.add("LICENCE RESTRICTION CODE: ")
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
if((emptyDictionary["DAT"]) != nil) {
|
|
878
|
+
passDict.updateValue(emptyDictionary["DAT"]!, forKey: "LICENCE ENDORSEMENT CODE: ")
|
|
879
|
+
if(keyArr .contains("LICENCE ENDORSEMENT CODE: ")) {
|
|
880
|
+
}
|
|
881
|
+
else {
|
|
882
|
+
|
|
883
|
+
valueArr.add(emptyDictionary["DAT"]!)
|
|
884
|
+
keyArr.add("LICENCE ENDORSEMENT CODE: ")
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
if((emptyDictionary["DAU"]) != nil) {
|
|
889
|
+
passDict.updateValue(emptyDictionary["DAU"]!, forKey: "HEIGHT IN FT_IN: ")
|
|
890
|
+
if(keyArr .contains("HEIGHT IN FT_IN: ")) {
|
|
891
|
+
}
|
|
892
|
+
else {
|
|
893
|
+
|
|
894
|
+
valueArr.add(emptyDictionary["DAU"]!)
|
|
895
|
+
keyArr.add("HEIGHT IN FT_IN:")
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
if((emptyDictionary["DAV"]) != nil) {
|
|
900
|
+
passDict.updateValue(emptyDictionary["DAV"]!, forKey: "HEIGHT IN CM: ")
|
|
901
|
+
if(keyArr .contains("HEIGHT IN CM: ")) {
|
|
902
|
+
}
|
|
903
|
+
else {
|
|
904
|
+
|
|
905
|
+
valueArr.add(emptyDictionary["DAV"]!)
|
|
906
|
+
keyArr.add("HEIGHT IN CM: ")
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
if((emptyDictionary["DAW"]) != nil) {
|
|
911
|
+
passDict.updateValue(emptyDictionary["DAW"]!, forKey: "WEIGHT IN LBS: ")
|
|
912
|
+
if(keyArr .contains("WEIGHT IN LBS: ")) {
|
|
913
|
+
}
|
|
914
|
+
else {
|
|
915
|
+
|
|
916
|
+
valueArr.add(emptyDictionary["DAW"]!)
|
|
917
|
+
keyArr.add("WEIGHT IN LBS: ")
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
if((emptyDictionary["DAX"]) != nil) {
|
|
924
|
+
passDict.updateValue(emptyDictionary["DAX"]!, forKey: "WEIGHT IN KG:")
|
|
925
|
+
if(keyArr .contains("WEIGHT IN KG:")) {
|
|
926
|
+
}
|
|
927
|
+
else {
|
|
928
|
+
|
|
929
|
+
valueArr.add(emptyDictionary["DAX"]!)
|
|
930
|
+
keyArr.add("WEIGHT IN KG:")
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
if((emptyDictionary["DAY"]) != nil) {
|
|
935
|
+
passDict.updateValue(emptyDictionary["DAY"]!, forKey: "EYE COLOR: ")
|
|
936
|
+
if(keyArr .contains("EYE COLOR: ")) {
|
|
937
|
+
}
|
|
938
|
+
else {
|
|
939
|
+
|
|
940
|
+
valueArr.add(emptyDictionary["DAY"]!)
|
|
941
|
+
keyArr.add("EYE COLOR:")
|
|
942
|
+
}
|
|
943
|
+
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
if((emptyDictionary["DAZ"]) != nil) {
|
|
947
|
+
passDict.updateValue(emptyDictionary["DAZ"]!, forKey: "HAIR COLOR: ")
|
|
948
|
+
if(keyArr .contains("HAIR COLOR: ")) {
|
|
949
|
+
}
|
|
950
|
+
else {
|
|
951
|
+
|
|
952
|
+
valueArr.add(emptyDictionary["DAZ"]!)
|
|
953
|
+
keyArr.add("HAIR COLOR:")
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
|
|
957
|
+
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
if((emptyDictionary["DBA"]) != nil) {
|
|
961
|
+
passDict.updateValue(emptyDictionary["DBA"]!, forKey: "LICENSE EXPIRATION DATE: ")
|
|
962
|
+
if(keyArr .contains("LICENSE EXPIRATION DATE: ")) {
|
|
963
|
+
}
|
|
964
|
+
else {
|
|
965
|
+
|
|
966
|
+
var str = emptyDictionary["DBA"]
|
|
967
|
+
let index = str?.index((str?.startIndex)!, offsetBy: 2, limitedBy: (str?.endIndex)!)
|
|
968
|
+
|
|
969
|
+
str?.insert("/", at: index!)
|
|
970
|
+
let index1 = str?.index((str?.startIndex)!, offsetBy: 5, limitedBy: (str?.endIndex)!)
|
|
971
|
+
str?.insert("/", at: index1!)
|
|
972
|
+
|
|
973
|
+
valueArr.add(str as Any)
|
|
974
|
+
keyArr.add("LICENSE EXPIRATION DATE: ")
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
if((emptyDictionary["DBB"]) != nil) {
|
|
978
|
+
passDict.updateValue(emptyDictionary["DBB"]!, forKey: "DATE OF BIRTH: ")
|
|
979
|
+
if(keyArr .contains("DATE OF BIRTH: ")) {
|
|
980
|
+
}
|
|
981
|
+
else {
|
|
982
|
+
var str = emptyDictionary["DBB"]
|
|
983
|
+
let index = str?.index((str?.startIndex)!, offsetBy: 2, limitedBy: (str?.endIndex)!)
|
|
984
|
+
|
|
985
|
+
str?.insert("/", at: index!)
|
|
986
|
+
let index1 = str?.index((str?.startIndex)!, offsetBy: 5, limitedBy: (str?.endIndex)!)
|
|
987
|
+
str?.insert("/", at: index1!)
|
|
988
|
+
|
|
989
|
+
valueArr.add(str as Any)
|
|
990
|
+
keyArr.add("DATE OF BIRTH:")
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
|
|
994
|
+
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
if((emptyDictionary["DBC"]) != nil) {
|
|
998
|
+
passDict.updateValue(emptyDictionary["DBC"]!, forKey: "SEX: ")
|
|
999
|
+
if(keyArr .contains("SEX: ")) {
|
|
1000
|
+
}
|
|
1001
|
+
else {
|
|
1002
|
+
if(emptyDictionary["DBC"] == "1") {
|
|
1003
|
+
|
|
1004
|
+
valueArr.add("MALE")
|
|
1005
|
+
}
|
|
1006
|
+
else {
|
|
1007
|
+
valueArr.add("FEMALE")
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
keyArr.add("SEX: ")
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
|
|
1014
|
+
|
|
1015
|
+
}
|
|
1016
|
+
|
|
1017
|
+
if((emptyDictionary["DBD"]) != nil) {
|
|
1018
|
+
passDict.updateValue(emptyDictionary["DBD"]!, forKey: "LICENSE OR ID DOCUMENT ISSUE DATE: ")
|
|
1019
|
+
if(keyArr .contains("LICENSE OR ID DOCUMENT ISSUE DATE: ")) {
|
|
1020
|
+
}
|
|
1021
|
+
else {
|
|
1022
|
+
|
|
1023
|
+
var str = emptyDictionary["DBD"]
|
|
1024
|
+
let index = str?.index((str?.startIndex)!, offsetBy: 2, limitedBy: (str?.endIndex)!)
|
|
1025
|
+
|
|
1026
|
+
str?.insert("/", at: index!)
|
|
1027
|
+
let index1 = str?.index((str?.startIndex)!, offsetBy: 5, limitedBy: (str?.endIndex)!)
|
|
1028
|
+
str?.insert("/", at: index1!)
|
|
1029
|
+
|
|
1030
|
+
valueArr.add(str as Any)
|
|
1031
|
+
keyArr.add("LICENSE OR ID DOCUMENT ISSUE DATE: ")
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
if((emptyDictionary["DBE"]) != nil) {
|
|
1036
|
+
passDict.updateValue(emptyDictionary["DBE"]!, forKey: "ISSUE TIMESTAMP: ")
|
|
1037
|
+
if(keyArr .contains("ISSUE TIMESTAMP: ")) {
|
|
1038
|
+
}
|
|
1039
|
+
else {
|
|
1040
|
+
valueArr.add(emptyDictionary["DBE"]!)
|
|
1041
|
+
keyArr.add("ISSUE TIMESTAMP:")
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
if((emptyDictionary["DBF"]) != nil) {
|
|
1046
|
+
passDict.updateValue(emptyDictionary["DBF"]!, forKey: "NUMBER OF DUPLICATES: ")
|
|
1047
|
+
if(keyArr .contains("NUMBER OF DUPLICATES: ")) {
|
|
1048
|
+
}
|
|
1049
|
+
else {
|
|
1050
|
+
|
|
1051
|
+
valueArr.add(emptyDictionary["DBF"]!)
|
|
1052
|
+
keyArr.add("NUMBER OF DUPLICATES: ")
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
if((emptyDictionary["DBG"]) != nil) {
|
|
1058
|
+
passDict.updateValue(emptyDictionary["DBG"]!, forKey: "RMEDICAL INDICATOR CODES: ")
|
|
1059
|
+
if(keyArr .contains("MEDICAL INDICATOR CODES: ")) {
|
|
1060
|
+
}
|
|
1061
|
+
else {
|
|
1062
|
+
|
|
1063
|
+
valueArr.add(emptyDictionary["DBG"]!)
|
|
1064
|
+
keyArr.add("MEDICAL INDICATOR CODES: ")
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
if((emptyDictionary["DBH"]) != nil) {
|
|
1070
|
+
passDict.updateValue(emptyDictionary["DBH"]!, forKey: "ORGAN DONOR: ")
|
|
1071
|
+
if(keyArr .contains("ORGAN DONOR: ")) {
|
|
1072
|
+
}
|
|
1073
|
+
else {
|
|
1074
|
+
|
|
1075
|
+
valueArr.add(emptyDictionary["DBH"]!)
|
|
1076
|
+
keyArr.add("ORGAN DONOR: ")
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
if((emptyDictionary["DBI"]) != nil) {
|
|
1081
|
+
passDict.updateValue(emptyDictionary["DBI"]!, forKey: "NON-RESIDENT INDICATOR: ")
|
|
1082
|
+
if(keyArr .contains("NON-RESIDENT INDICATOR: ")) {
|
|
1083
|
+
}
|
|
1084
|
+
else {
|
|
1085
|
+
|
|
1086
|
+
valueArr.add(emptyDictionary["DBI"]!)
|
|
1087
|
+
keyArr.add("NON-RESIDENT INDICATOR: ")
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
if((emptyDictionary["DBJ"]) != nil) {
|
|
1093
|
+
passDict.updateValue(emptyDictionary["DBJ"]!, forKey: "UNIQUE CUSTOMER IDENTIFIER: ")
|
|
1094
|
+
if(keyArr .contains("UNIQUE CUSTOMER IDENTIFIER: ")) {
|
|
1095
|
+
}
|
|
1096
|
+
else {
|
|
1097
|
+
|
|
1098
|
+
valueArr.add(emptyDictionary["DBJ"]!)
|
|
1099
|
+
keyArr.add("UNIQUE CUSTOMER IDENTIFIER: ")
|
|
1100
|
+
}
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
if((emptyDictionary["DBK"]) != nil) {
|
|
1104
|
+
passDict.updateValue(emptyDictionary["DBK"]!, forKey: "SOCIAL SECURITY NUMBER: ")
|
|
1105
|
+
if(keyArr .contains("SOCIAL SECURITY NUMBER: ")) {
|
|
1106
|
+
}
|
|
1107
|
+
else {
|
|
1108
|
+
|
|
1109
|
+
valueArr.add(emptyDictionary["DBK"]!)
|
|
1110
|
+
keyArr.add("SOCIAL SECURITY NUMBER: ")
|
|
1111
|
+
}
|
|
1112
|
+
|
|
1113
|
+
}
|
|
1114
|
+
if((emptyDictionary["DBL"]) != nil) {
|
|
1115
|
+
passDict.updateValue(emptyDictionary["DBL"]!, forKey: "DATE OF BIRTH: ")
|
|
1116
|
+
if(keyArr .contains("DATE OF BIRTH: ")) {
|
|
1117
|
+
}
|
|
1118
|
+
else {
|
|
1119
|
+
|
|
1120
|
+
valueArr.add(emptyDictionary["DBL"]!)
|
|
1121
|
+
keyArr.add("DATE OF BIRTH: ")
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
|
|
1125
|
+
if((emptyDictionary["DBM"]) != nil) {
|
|
1126
|
+
passDict.updateValue(emptyDictionary["DBM"]!, forKey: "SOCIAL SECURITY NUMBER: ")
|
|
1127
|
+
if(keyArr .contains("SOCIAL SECURITY NUMBER: ")) {
|
|
1128
|
+
}
|
|
1129
|
+
else {
|
|
1130
|
+
|
|
1131
|
+
valueArr.add(emptyDictionary["DBM"]!)
|
|
1132
|
+
keyArr.add("SOCIAL SECURITY NUMBER: ")
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
if((emptyDictionary["DBN"]) != nil) {
|
|
1137
|
+
passDict.updateValue(emptyDictionary["DBN"]!, forKey: "FULL NAME: ")
|
|
1138
|
+
if(keyArr .contains("FULL NAME: ")) {
|
|
1139
|
+
}
|
|
1140
|
+
else {
|
|
1141
|
+
|
|
1142
|
+
valueArr.add(emptyDictionary["DBN"]!)
|
|
1143
|
+
keyArr.add("FULL NAME: ")
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
if((emptyDictionary["DBO"]) != nil) {
|
|
1148
|
+
passDict.updateValue(emptyDictionary["DBO"]!, forKey: "LAST NAME: ")
|
|
1149
|
+
if(keyArr .contains("LAST NAME: ")) {
|
|
1150
|
+
}
|
|
1151
|
+
else {
|
|
1152
|
+
|
|
1153
|
+
valueArr.add(emptyDictionary["DBO"]!)
|
|
1154
|
+
keyArr.add("LAST NAME: ")
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
if((emptyDictionary["DBP"]) != nil) {
|
|
1159
|
+
passDict.updateValue(emptyDictionary["DBP"]!, forKey: "FIRST NAME: ")
|
|
1160
|
+
if(keyArr .contains("FIRST NAME: ")) {
|
|
1161
|
+
}
|
|
1162
|
+
else {
|
|
1163
|
+
|
|
1164
|
+
valueArr.add(emptyDictionary["DBP"]!)
|
|
1165
|
+
keyArr.add("FIRST NAME: ")
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
if((emptyDictionary["DBQ"]) != nil) {
|
|
1170
|
+
passDict.updateValue(emptyDictionary["DBQ"]!, forKey: "MIDDLE NAME: ")
|
|
1171
|
+
if(keyArr .contains("MIDDLE NAME: ")) {
|
|
1172
|
+
}
|
|
1173
|
+
else {
|
|
1174
|
+
|
|
1175
|
+
valueArr.add(emptyDictionary["DBQ"]!)
|
|
1176
|
+
keyArr.add("MIDDLE NAME: ")
|
|
1177
|
+
}
|
|
1178
|
+
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
if((emptyDictionary["DBR"]) != nil) {
|
|
1182
|
+
passDict.updateValue(emptyDictionary["DBR"]!, forKey: "SUFFIX: ")
|
|
1183
|
+
if(keyArr .contains("SUFFIX: ")) {
|
|
1184
|
+
}
|
|
1185
|
+
else {
|
|
1186
|
+
|
|
1187
|
+
valueArr.add(emptyDictionary["DBR"]!)
|
|
1188
|
+
keyArr.add("SUFFIX: ")
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
if((emptyDictionary["DBS"]) != nil) {
|
|
1194
|
+
passDict.updateValue(emptyDictionary["DBS"]!, forKey: "PREFIX: ")
|
|
1195
|
+
if(keyArr .contains("PREFIX: ")) {
|
|
1196
|
+
}
|
|
1197
|
+
else {
|
|
1198
|
+
|
|
1199
|
+
valueArr.add(emptyDictionary["DBS"]!)
|
|
1200
|
+
keyArr.add("PREFIX: ")
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
if((emptyDictionary["DCA"]) != nil) {
|
|
1206
|
+
passDict.updateValue(emptyDictionary["DCA"]!, forKey: "VIRGINIA SPECIFIC CLASS: ")
|
|
1207
|
+
if(keyArr .contains("VIRGINIA SPECIFIC CLASS: ")) {
|
|
1208
|
+
}
|
|
1209
|
+
else {
|
|
1210
|
+
|
|
1211
|
+
|
|
1212
|
+
|
|
1213
|
+
valueArr.add(emptyDictionary["DCA"]!)
|
|
1214
|
+
keyArr.add("VIRGINIA SPECIFIC CLASS: ")
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
if((emptyDictionary["DCB"]) != nil) {
|
|
1219
|
+
passDict.updateValue(emptyDictionary["DCB"]!, forKey: "VIRGINIA SPECIFIC RESTRICTIONS: ")
|
|
1220
|
+
if(keyArr .contains("VIRGINIA SPECIFIC RESTRICTIONS: ")) {
|
|
1221
|
+
}
|
|
1222
|
+
else {
|
|
1223
|
+
|
|
1224
|
+
|
|
1225
|
+
|
|
1226
|
+
valueArr.add(emptyDictionary["DCB"]!)
|
|
1227
|
+
keyArr.add("VIRGINIA SPECIFIC RESTRICTIONS: ")
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
if((emptyDictionary["DCD"]) != nil) {
|
|
1232
|
+
passDict.updateValue(emptyDictionary["DCD"]!, forKey: "VIRGINIA SPECIFIC ENDORSEMENTS: ")
|
|
1233
|
+
if(keyArr .contains("VIRGINIA SPECIFIC ENDORSEMENTS: ")) {
|
|
1234
|
+
}
|
|
1235
|
+
else {
|
|
1236
|
+
|
|
1237
|
+
|
|
1238
|
+
|
|
1239
|
+
valueArr.add(emptyDictionary["DCD"]!)
|
|
1240
|
+
keyArr.add("VIRGINIA SPECIFIC ENDORSEMENTS: ")
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
|
|
1244
|
+
if((emptyDictionary["DCE"]) != nil) {
|
|
1245
|
+
passDict.updateValue(emptyDictionary["DCE"]!, forKey: "PHYSICAL DESCRIPTION WEIGHT RANGE: ")
|
|
1246
|
+
if(keyArr .contains("PHYSICAL DESCRIPTION WEIGHT RANGE: ")) {
|
|
1247
|
+
}
|
|
1248
|
+
else {
|
|
1249
|
+
|
|
1250
|
+
|
|
1251
|
+
|
|
1252
|
+
valueArr.add(emptyDictionary["DCE"]!)
|
|
1253
|
+
keyArr.add("PHYSICAL DESCRIPTION WEIGHT RANGE: ")
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
if((emptyDictionary["DCF"]) != nil) {
|
|
1258
|
+
passDict.updateValue(emptyDictionary["DCF"]!, forKey: "DOCUMENT DISCRIMINATOR: ")
|
|
1259
|
+
if(keyArr .contains("DOCUMENT DISCRIMINATOR: ")) {
|
|
1260
|
+
}
|
|
1261
|
+
else {
|
|
1262
|
+
|
|
1263
|
+
valueArr.add(emptyDictionary["DCF"]!)
|
|
1264
|
+
keyArr.add("DOCUMENT DISCRIMINATOR: ")
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
if((emptyDictionary["DCG"]) != nil) {
|
|
1271
|
+
passDict.updateValue(emptyDictionary["DCG"]!, forKey: "COUNTRY TERRITORY OF ISSUANCE: ")
|
|
1272
|
+
if(keyArr .contains("COUNTRY TERRITORY OF ISSUANCE: ")) {
|
|
1273
|
+
}
|
|
1274
|
+
else {
|
|
1275
|
+
|
|
1276
|
+
|
|
1277
|
+
|
|
1278
|
+
valueArr.add(emptyDictionary["DCG"]!)
|
|
1279
|
+
keyArr.add("COUNTRY TERRITORY OF ISSUANCE: ")
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
if((emptyDictionary["DCH"]) != nil) {
|
|
1284
|
+
passDict.updateValue(emptyDictionary["DCH"]!, forKey: "FEDERAL COMMERCIAL VEHICLE CODES: ")
|
|
1285
|
+
if(keyArr .contains("FEDERAL COMMERCIAL VEHICLE CODES: ")) {
|
|
1286
|
+
}
|
|
1287
|
+
else {
|
|
1288
|
+
|
|
1289
|
+
|
|
1290
|
+
|
|
1291
|
+
valueArr.add(emptyDictionary["DCH"]!)
|
|
1292
|
+
keyArr.add("FEDERAL COMMERCIAL VEHICLE CODES: ")
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
if((emptyDictionary["DCI"]) != nil) {
|
|
1297
|
+
passDict.updateValue(emptyDictionary["DCI"]!, forKey: "PLACE OF BIRTH: ")
|
|
1298
|
+
if(keyArr .contains("PLACE OF BIRTH: ")) {
|
|
1299
|
+
}
|
|
1300
|
+
else {
|
|
1301
|
+
|
|
1302
|
+
|
|
1303
|
+
|
|
1304
|
+
valueArr.add(emptyDictionary["DCI"]!)
|
|
1305
|
+
keyArr.add("PLACE OF BIRTH: ")
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
if((emptyDictionary["DCJ"]) != nil) {
|
|
1310
|
+
passDict.updateValue(emptyDictionary["DCJ"]!, forKey: "AUDIT INFORMATION: ")
|
|
1311
|
+
if(keyArr .contains("AUDIT INFORMATION: ")) {
|
|
1312
|
+
}
|
|
1313
|
+
else {
|
|
1314
|
+
|
|
1315
|
+
|
|
1316
|
+
|
|
1317
|
+
valueArr.add(emptyDictionary["DCJ"]!)
|
|
1318
|
+
keyArr.add("AUDIT INFORMATION: ")
|
|
1319
|
+
}
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
if((emptyDictionary["DCK"]) != nil) {
|
|
1323
|
+
passDict.updateValue(emptyDictionary["DCK"]!, forKey: "INVENTORY CONTROL NUMBER: ")
|
|
1324
|
+
if(keyArr .contains("INVENTORY CONTROL NUMBER: ")) {
|
|
1325
|
+
}
|
|
1326
|
+
else {
|
|
1327
|
+
valueArr.add(emptyDictionary["DCK"]!)
|
|
1328
|
+
keyArr.add("INVENTORY CONTROL NUMBER: ")
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
|
+
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
if((emptyDictionary["DCL"]) != nil) {
|
|
1335
|
+
passDict.updateValue(emptyDictionary["DCL"]!, forKey: "RACE ETHNICITY: ")
|
|
1336
|
+
if(keyArr .contains("RACE ETHNICITY: ")) {
|
|
1337
|
+
}
|
|
1338
|
+
else {
|
|
1339
|
+
|
|
1340
|
+
valueArr.add(emptyDictionary["DCL"]!)
|
|
1341
|
+
keyArr.add("RACE ETHNICITY: ")
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1344
|
+
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
if((emptyDictionary["DCM"]) != nil) {
|
|
1348
|
+
passDict.updateValue(emptyDictionary["DCM"]!, forKey: "STANDARD VEHICLE CLASSIFICATION: ")
|
|
1349
|
+
if(keyArr .contains("STANDARD VEHICLE CLASSIFICATION: ")) {
|
|
1350
|
+
}
|
|
1351
|
+
else {
|
|
1352
|
+
|
|
1353
|
+
valueArr.add(emptyDictionary["DCM"]!)
|
|
1354
|
+
keyArr.add("STANDARD VEHICLE CLASSIFICATION: ")
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
if((emptyDictionary["DCN"]) != nil) {
|
|
1361
|
+
passDict.updateValue(emptyDictionary["DCN"]!, forKey: "STANDARD ENDORSEMENT CODE: ")
|
|
1362
|
+
if(keyArr .contains("STANDARD ENDORSEMENT CODE: ")) {
|
|
1363
|
+
}
|
|
1364
|
+
else {
|
|
1365
|
+
|
|
1366
|
+
|
|
1367
|
+
|
|
1368
|
+
valueArr.add(emptyDictionary["DCN"]!)
|
|
1369
|
+
keyArr.add("STANDARD ENDORSEMENT CODE: ")
|
|
1370
|
+
}
|
|
1371
|
+
}
|
|
1372
|
+
|
|
1373
|
+
if((emptyDictionary["DCO"]) != nil) {
|
|
1374
|
+
passDict.updateValue(emptyDictionary["DCO"]!, forKey: "STANDARD RESTRICTION CODE: ")
|
|
1375
|
+
if(keyArr .contains("STANDARD RESTRICTION CODE: ")) {
|
|
1376
|
+
}
|
|
1377
|
+
else {
|
|
1378
|
+
|
|
1379
|
+
|
|
1380
|
+
|
|
1381
|
+
valueArr.add(emptyDictionary["DCO"]!)
|
|
1382
|
+
keyArr.add("STANDARD RESTRICTION CODE: ")
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
if((emptyDictionary["DCP"]) != nil) {
|
|
1387
|
+
passDict.updateValue(emptyDictionary["DCP"]!, forKey: "JURISDICTION SPECIFIC VEHICLE CLASSIFICATION DESCRIPTION: ")
|
|
1388
|
+
if(keyArr .contains("JURISDICTION SPECIFIC VEHICLE CLASSIFICATION DESCRIPTION: ")) {
|
|
1389
|
+
}
|
|
1390
|
+
else {
|
|
1391
|
+
|
|
1392
|
+
|
|
1393
|
+
|
|
1394
|
+
valueArr.add(emptyDictionary["DCP"]!)
|
|
1395
|
+
keyArr.add("JURISDICTION SPECIFIC VEHICLE CLASSIFICATION DESCRIPTION: ")
|
|
1396
|
+
}
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
if((emptyDictionary["DCQ"]) != nil) {
|
|
1400
|
+
passDict.updateValue(emptyDictionary["DCQ"]!, forKey: "JURISDICTION-SPECIFIC: ")
|
|
1401
|
+
if(keyArr .contains("JURISDICTION-SPECIFIC: ")) {
|
|
1402
|
+
}
|
|
1403
|
+
else {
|
|
1404
|
+
|
|
1405
|
+
|
|
1406
|
+
|
|
1407
|
+
valueArr.add(emptyDictionary["DCQ"]!)
|
|
1408
|
+
keyArr.add("JURISDICTION-SPECIFIC: ")
|
|
1409
|
+
}
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
if((emptyDictionary["DCR"]) != nil) {
|
|
1413
|
+
passDict.updateValue(emptyDictionary["DCR"]!, forKey: "JURISDICTION SPECIFIC RESTRICTION CODE DESCRIPTION: ")
|
|
1414
|
+
if(keyArr .contains("JURISDICTION SPECIFIC RESTRICTION CODE DESCRIPTION: ")) {
|
|
1415
|
+
}
|
|
1416
|
+
else {
|
|
1417
|
+
|
|
1418
|
+
|
|
1419
|
+
|
|
1420
|
+
valueArr.add(emptyDictionary["DCR"]!)
|
|
1421
|
+
keyArr.add("JURISDICTION SPECIFIC RESTRICTION CODE DESCRIPTION: ")
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
|
|
1425
|
+
if((emptyDictionary["DCS"]) != nil) {
|
|
1426
|
+
passDict.updateValue(emptyDictionary["DCS"]!, forKey: "FAMILY NAME:")
|
|
1427
|
+
if(keyArr .contains("FAMILY NAME:")) {
|
|
1428
|
+
}
|
|
1429
|
+
else {
|
|
1430
|
+
|
|
1431
|
+
valueArr.add(emptyDictionary["DCS"]!)
|
|
1432
|
+
keyArr.add("FAMILY NAME:")
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
if((emptyDictionary["DCT"]) != nil) {
|
|
1439
|
+
passDict.updateValue(emptyDictionary["DCT"]!, forKey: "GIVEN NAME:")
|
|
1440
|
+
if(keyArr .contains("GIVEN NAME:")) {
|
|
1441
|
+
}
|
|
1442
|
+
else {
|
|
1443
|
+
|
|
1444
|
+
valueArr.add(emptyDictionary["DCT"]!)
|
|
1445
|
+
keyArr.add("GIVEN NAME:")
|
|
1446
|
+
}
|
|
1447
|
+
|
|
1448
|
+
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
if((emptyDictionary["DCU"]) != nil) {
|
|
1452
|
+
passDict.updateValue(emptyDictionary["DCU"]!, forKey: "SUFFIX:")
|
|
1453
|
+
if(keyArr .contains("SUFFIX:")) {
|
|
1454
|
+
}
|
|
1455
|
+
else {
|
|
1456
|
+
|
|
1457
|
+
valueArr.add(emptyDictionary["DCU"]!)
|
|
1458
|
+
keyArr.add("SUFFIX:")
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
if((emptyDictionary["DDA"]) != nil) {
|
|
1465
|
+
passDict.updateValue(emptyDictionary["DDA"]!, forKey: "COMPLIANCE TYPE: ")
|
|
1466
|
+
if(keyArr .contains("COMPLIANCE TYPE: ")) {
|
|
1467
|
+
}
|
|
1468
|
+
else {
|
|
1469
|
+
|
|
1470
|
+
|
|
1471
|
+
|
|
1472
|
+
valueArr.add(emptyDictionary["DDA"]!)
|
|
1473
|
+
keyArr.add("COMPLIANCE TYPE: ")
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1477
|
+
if((emptyDictionary["DDB"]) != nil) {
|
|
1478
|
+
passDict.updateValue(emptyDictionary["DDB"]!, forKey: "CARD REVISION DATE: ")
|
|
1479
|
+
if(keyArr .contains("CARD REVISION DATE: ")) {
|
|
1480
|
+
}
|
|
1481
|
+
else {
|
|
1482
|
+
|
|
1483
|
+
|
|
1484
|
+
var str = emptyDictionary["DDB"]
|
|
1485
|
+
let index = str?.index((str?.startIndex)!, offsetBy: 2, limitedBy: (str?.endIndex)!)
|
|
1486
|
+
|
|
1487
|
+
str?.insert("/", at: index!)
|
|
1488
|
+
let index1 = str?.index((str?.startIndex)!, offsetBy: 5, limitedBy: (str?.endIndex)!)
|
|
1489
|
+
str?.insert("/", at: index1!)
|
|
1490
|
+
|
|
1491
|
+
valueArr.add(str as Any)
|
|
1492
|
+
|
|
1493
|
+
keyArr.add("CARD REVISION DATE: ")
|
|
1494
|
+
}
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
if((emptyDictionary["DDC"]) != nil) {
|
|
1498
|
+
passDict.updateValue(emptyDictionary["DDC"]!, forKey: "HAZMAT ENDORSEMENT EXPIRY DATE: ")
|
|
1499
|
+
if(keyArr .contains("HAZMAT ENDORSEMENT EXPIRY DATE: ")) {
|
|
1500
|
+
}
|
|
1501
|
+
else {
|
|
1502
|
+
|
|
1503
|
+
var str = emptyDictionary["DDC"]
|
|
1504
|
+
let index = str?.index((str?.startIndex)!, offsetBy: 2, limitedBy: (str?.endIndex)!)
|
|
1505
|
+
|
|
1506
|
+
str?.insert("/", at: index!)
|
|
1507
|
+
let index1 = str?.index((str?.startIndex)!, offsetBy: 5, limitedBy: (str?.endIndex)!)
|
|
1508
|
+
str?.insert("/", at: index1!)
|
|
1509
|
+
|
|
1510
|
+
valueArr.add(str as Any)
|
|
1511
|
+
|
|
1512
|
+
keyArr.add("HAZMAT ENDORSEMENT EXPIRY DATE: ")
|
|
1513
|
+
}
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
if((emptyDictionary["DDD"]) != nil) {
|
|
1517
|
+
passDict.updateValue(emptyDictionary["DDD"]!, forKey: "LIMITED DURATION DOCUMENT INDICATOR: ")
|
|
1518
|
+
if(keyArr .contains("LIMITED DURATION DOCUMENT INDICATOR: ")) {
|
|
1519
|
+
}
|
|
1520
|
+
else {
|
|
1521
|
+
|
|
1522
|
+
valueArr.add(emptyDictionary["DDD"]!)
|
|
1523
|
+
keyArr.add("LIMITED DURATION DOCUMENT INDICATOR: ")
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
|
|
1527
|
+
if((emptyDictionary["DDE"]) != nil) {
|
|
1528
|
+
passDict.updateValue(emptyDictionary["DDE"]!, forKey: "FAMILY NAMES TRUNCATION: ")
|
|
1529
|
+
if(keyArr .contains("FAMILY NAMES TRUNCATION: ")) {
|
|
1530
|
+
}
|
|
1531
|
+
else {
|
|
1532
|
+
|
|
1533
|
+
valueArr.add(emptyDictionary["DDE"]!)
|
|
1534
|
+
keyArr.add("FAMILY NAMES TRUNCATION: ")
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
|
|
1538
|
+
if((emptyDictionary["DDF"]) != nil) {
|
|
1539
|
+
passDict.updateValue(emptyDictionary["DDF"]!, forKey: "FIRST NAMES TRUNCATION: ")
|
|
1540
|
+
if(keyArr .contains("FIRST NAMES TRUNCATION: ")) {
|
|
1541
|
+
}
|
|
1542
|
+
else {
|
|
1543
|
+
|
|
1544
|
+
valueArr.add(emptyDictionary["DDF"]!)
|
|
1545
|
+
keyArr.add("FIRST NAMES TRUNCATION: ")
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1549
|
+
if((emptyDictionary["DDG"]) != nil) {
|
|
1550
|
+
passDict.updateValue(emptyDictionary["DDG"]!, forKey: "MIDDLE NAMES TRUNCATION: ")
|
|
1551
|
+
if(keyArr .contains("MIDDLE NAMES TRUNCATION: ")) {
|
|
1552
|
+
}
|
|
1553
|
+
else {
|
|
1554
|
+
|
|
1555
|
+
valueArr.add(emptyDictionary["DDG"]!)
|
|
1556
|
+
keyArr.add("MIDDLE NAMES TRUNCATION: ")
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1560
|
+
if((emptyDictionary["DDH"]) != nil) {
|
|
1561
|
+
passDict.updateValue(emptyDictionary["DDH"]!, forKey: "UNDER 18 UNTIL: ")
|
|
1562
|
+
if(keyArr .contains("UNDER 18 UNTIL: ")) {
|
|
1563
|
+
}
|
|
1564
|
+
else {
|
|
1565
|
+
var dstr = emptyDictionary["DDH"]
|
|
1566
|
+
let index = dstr?.index((dstr?.startIndex)!, offsetBy: 2, limitedBy: (dstr?.endIndex)!)
|
|
1567
|
+
|
|
1568
|
+
dstr?.insert("/", at: index!)
|
|
1569
|
+
let index1 = dstr?.index((dstr?.startIndex)!, offsetBy: 5, limitedBy: (dstr?.endIndex)!)
|
|
1570
|
+
dstr?.insert("/", at: index1!)
|
|
1571
|
+
valueArr.add(dstr as Any)
|
|
1572
|
+
keyArr.add("UNDER 18 UNTIL:")
|
|
1573
|
+
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
if((emptyDictionary["DDI"]) != nil) {
|
|
1578
|
+
passDict.updateValue(emptyDictionary["DDI"]!, forKey: "UNDER 19 UNTIL: ")
|
|
1579
|
+
if(keyArr .contains("UNDER 19 UNTIL: ")) {
|
|
1580
|
+
}
|
|
1581
|
+
else {
|
|
1582
|
+
var str = emptyDictionary["DDI"]
|
|
1583
|
+
let index = str?.index((str?.startIndex)!, offsetBy: 2, limitedBy: (str?.endIndex)!)
|
|
1584
|
+
|
|
1585
|
+
str?.insert("/", at: index!)
|
|
1586
|
+
let index1 = str?.index((str?.startIndex)!, offsetBy: 5, limitedBy: (str?.endIndex)!)
|
|
1587
|
+
str?.insert("/", at: index1!)
|
|
1588
|
+
|
|
1589
|
+
valueArr.add(str as Any)
|
|
1590
|
+
keyArr.add("UNDER 19 UNTIL:")
|
|
1591
|
+
}
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
if((emptyDictionary["DDJ"]) != nil) {
|
|
1595
|
+
passDict.updateValue(emptyDictionary["DDJ"]!, forKey: "UNDER 21 UNTIL: ")
|
|
1596
|
+
if(keyArr .contains("UNDER 21 UNTIL: ")) {
|
|
1597
|
+
}
|
|
1598
|
+
else {
|
|
1599
|
+
var str = emptyDictionary["DDJ"]
|
|
1600
|
+
let index = str?.index((str?.startIndex)!, offsetBy: 2, limitedBy: (str?.endIndex)!)
|
|
1601
|
+
|
|
1602
|
+
str?.insert("/", at: index!)
|
|
1603
|
+
let index1 = str?.index((str?.startIndex)!, offsetBy: 5, limitedBy: (str?.endIndex)!)
|
|
1604
|
+
str?.insert("/", at: index1!)
|
|
1605
|
+
|
|
1606
|
+
valueArr.add(str as Any)
|
|
1607
|
+
keyArr.add("UNDER 21 UNTIL: ")
|
|
1608
|
+
}
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
if((emptyDictionary["DDK"]) != nil) {
|
|
1612
|
+
passDict.updateValue(emptyDictionary["DDK"]!, forKey: "ORGAN DONOR INDICATOR: ")
|
|
1613
|
+
if(keyArr .contains("ORGAN DONOR INDICATOR: ")) {
|
|
1614
|
+
}
|
|
1615
|
+
else {
|
|
1616
|
+
|
|
1617
|
+
valueArr.add(emptyDictionary["DDK"]!)
|
|
1618
|
+
keyArr.add("ORGAN DONOR INDICATOR: ")
|
|
1619
|
+
}
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
if((emptyDictionary["DDL"]) != nil) {
|
|
1623
|
+
passDict.updateValue(emptyDictionary["DDL"]!, forKey: "VETERAN INDICATOR: ")
|
|
1624
|
+
if(keyArr .contains("VETERAN INDICATOR: ")) {
|
|
1625
|
+
}
|
|
1626
|
+
else {
|
|
1627
|
+
|
|
1628
|
+
valueArr.add(emptyDictionary["DDL"]!)
|
|
1629
|
+
keyArr.add("VETERAN INDICATOR: ")
|
|
1630
|
+
}
|
|
1631
|
+
|
|
1632
|
+
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
if((emptyDictionary["PAA"]) != nil) {
|
|
1636
|
+
passDict.updateValue(emptyDictionary["PAA"]!, forKey: "PERMIT CLASSIFICATION CODE: ")
|
|
1637
|
+
if(keyArr .contains("PERMIT CLASSIFICATION CODE: ")) {
|
|
1638
|
+
}
|
|
1639
|
+
else {
|
|
1640
|
+
|
|
1641
|
+
valueArr.add(emptyDictionary["PAA"]!)
|
|
1642
|
+
keyArr.add("PERMIT CLASSIFICATION CODE: ")
|
|
1643
|
+
}
|
|
1644
|
+
|
|
1645
|
+
|
|
1646
|
+
}
|
|
1647
|
+
|
|
1648
|
+
if((emptyDictionary["PAB"]) != nil) {
|
|
1649
|
+
passDict.updateValue(emptyDictionary["PAB"]!, forKey: "PERMIT EXPIRATION DATE: ")
|
|
1650
|
+
if(keyArr .contains("PERMIT EXPIRATION DATE: ")) {
|
|
1651
|
+
}
|
|
1652
|
+
else {
|
|
1653
|
+
|
|
1654
|
+
valueArr.add(emptyDictionary["PAB"]!)
|
|
1655
|
+
keyArr.add("PERMIT EXPIRATION DATE: ")
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
if((emptyDictionary["PAC"]) != nil) {
|
|
1662
|
+
passDict.updateValue(emptyDictionary["PAC"]!, forKey: "PERMIT IDENTIFIER: ")
|
|
1663
|
+
if(keyArr .contains("PERMIT IDENTIFIER: ")) {
|
|
1664
|
+
}
|
|
1665
|
+
else {
|
|
1666
|
+
|
|
1667
|
+
valueArr.add(emptyDictionary["PAC"]!)
|
|
1668
|
+
keyArr.add("PERMIT IDENTIFIER: ")
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
if((emptyDictionary["PAD"]) != nil) {
|
|
1673
|
+
passDict.updateValue(emptyDictionary["PAD"]!, forKey: "PERMIT ISSUE DATE: ")
|
|
1674
|
+
if(keyArr .contains("PERMIT ISSUE DATE: ")) {
|
|
1675
|
+
}
|
|
1676
|
+
else {
|
|
1677
|
+
var str = emptyDictionary["PAD"]
|
|
1678
|
+
let index = str?.index((str?.startIndex)!, offsetBy: 2, limitedBy: (str?.endIndex)!)
|
|
1679
|
+
|
|
1680
|
+
str?.insert("/", at: index!)
|
|
1681
|
+
let index1 = str?.index((str?.startIndex)!, offsetBy: 5, limitedBy: (str?.endIndex)!)
|
|
1682
|
+
str?.insert("/", at: index1!)
|
|
1683
|
+
|
|
1684
|
+
valueArr.add(str as Any)
|
|
1685
|
+
|
|
1686
|
+
keyArr.add("PERMIT ISSUE DATE: ")
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1690
|
+
if((emptyDictionary["PAE"]) != nil) {
|
|
1691
|
+
passDict.updateValue(emptyDictionary["PAE"]!, forKey: "PERMIT RESTRICTION CODE: ")
|
|
1692
|
+
if(keyArr .contains("PERMIT RESTRICTION CODE: ")) {
|
|
1693
|
+
}
|
|
1694
|
+
else {
|
|
1695
|
+
|
|
1696
|
+
valueArr.add(emptyDictionary["PAE"]!)
|
|
1697
|
+
keyArr.add("PERMIT RESTRICTION CODE: ")
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1703
|
+
if((emptyDictionary["PAF"]) != nil) {
|
|
1704
|
+
passDict.updateValue(emptyDictionary["PAF"]!, forKey: "PERMIT ENDORSEMENT CODE: ")
|
|
1705
|
+
if(keyArr .contains("PERMIT ENDORSEMENT CODE: ")) {
|
|
1706
|
+
}
|
|
1707
|
+
else {
|
|
1708
|
+
|
|
1709
|
+
valueArr.add(emptyDictionary["PAF"]!)
|
|
1710
|
+
keyArr.add("PERMIT ENDORSEMENT CODE: ")
|
|
1711
|
+
}
|
|
1712
|
+
|
|
1713
|
+
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
if((emptyDictionary["ZVA"]) != nil) {
|
|
1717
|
+
passDict.updateValue(emptyDictionary["ZVA"]!, forKey: "COURT RESTRICTION CODE: ")
|
|
1718
|
+
if(keyArr .contains("COURT RESTRICTION CODE: ")) {
|
|
1719
|
+
}
|
|
1720
|
+
else {
|
|
1721
|
+
|
|
1722
|
+
valueArr.add(emptyDictionary["ZVA"]!)
|
|
1723
|
+
keyArr.add("COURT RESTRICTION CODE: ")
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
if(emptyDictionary["DAC"] != nil || emptyDictionary["DAD"] != nil || emptyDictionary["DCS"] != nil || emptyDictionary["DAG"] != nil || emptyDictionary["DAI"] != nil || emptyDictionary["DAJ"] != nil || emptyDictionary["DAK"] != nil || emptyDictionary["DBA"] != nil) {
|
|
1728
|
+
return true
|
|
1729
|
+
}
|
|
1730
|
+
else {
|
|
1731
|
+
return false
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1737
|
+
extension ViewController: VideoCameraWrapperDelegate {
|
|
1738
|
+
|
|
1739
|
+
func isBothSideAvailable(_ isBothAvailable: Bool) {
|
|
1740
|
+
isbothSideAvailable = isBothAvailable
|
|
1741
|
+
accuraCameraWrapper?.cardSide(.FRONT_CARD_SCAN)
|
|
1742
|
+
}
|
|
1743
|
+
|
|
1744
|
+
func onUpdateLayout(_ frameSize: CGSize, _ borderRatio: Float) {
|
|
1745
|
+
var width: CGFloat = 0.0
|
|
1746
|
+
var height: CGFloat = 0.0
|
|
1747
|
+
if(isCheckScanOCR) {
|
|
1748
|
+
if(cardType != 2 && cardType != 3) {
|
|
1749
|
+
let orientastion = UIApplication.shared.statusBarOrientation
|
|
1750
|
+
if(orientastion == UIInterfaceOrientation.portrait) {
|
|
1751
|
+
width = frameSize.width
|
|
1752
|
+
height = frameSize.height
|
|
1753
|
+
// viewNavigationBar.backgroundColor = UIColor(hexString: accuraErrorCode["CameraScreen_Navigation_Color"] as! String)//UIColor(red: 231.0 / 255.0, green: 52.0 / 255.0, blue: 74.0 / 255.0, alpha: 1.0)
|
|
1754
|
+
} else {
|
|
1755
|
+
|
|
1756
|
+
self.viewNavigationBar.backgroundColor = .clear
|
|
1757
|
+
height = (((UIScreen.main.bounds.size.height - 100) * 5) / 5.6)
|
|
1758
|
+
width = (height / CGFloat(borderRatio))
|
|
1759
|
+
print("boreder ratio :- ", borderRatio)
|
|
1760
|
+
}
|
|
1761
|
+
print("layer", width)
|
|
1762
|
+
DispatchQueue.main.async {
|
|
1763
|
+
self._constant_width.constant = width
|
|
1764
|
+
|
|
1765
|
+
self._constant_height.constant = height
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1768
|
+
}
|
|
1769
|
+
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
|
|
1773
|
+
}
|
|
1774
|
+
|
|
1775
|
+
func dlPlateNumber(_ plateNumber: String!, andImageNumberPlate imageNumberPlate: UIImage!) {
|
|
1776
|
+
shareScanningListing["plate_number"] = plateNumber
|
|
1777
|
+
var results:[String: Any] = [:]
|
|
1778
|
+
var frontData:[String: Any] = [:]
|
|
1779
|
+
// var backData:[String: Any] = [:]
|
|
1780
|
+
|
|
1781
|
+
if let frontUri = AccurascanKyc.getImageUri(img: imageNumberPlate, name: nil) {
|
|
1782
|
+
results["front_img"] = frontUri
|
|
1783
|
+
}
|
|
1784
|
+
frontData["PlateNumber"] = plateNumber
|
|
1785
|
+
results["front_data"] = frontData
|
|
1786
|
+
// results["back_data"] = backData
|
|
1787
|
+
results["type"] = "DL_PLATE"
|
|
1788
|
+
|
|
1789
|
+
callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
1790
|
+
self.dismiss(animated: true)
|
|
1791
|
+
|
|
1792
|
+
}
|
|
1793
|
+
|
|
1794
|
+
func resultData(_ resultmodel: ResultModel!) {
|
|
1795
|
+
AudioServicesPlaySystemSound(SystemSoundID(1315))
|
|
1796
|
+
if isbothSideAvailable {
|
|
1797
|
+
accuraCameraWrapper?.cardSide(.BACK_CARD_SCAN)
|
|
1798
|
+
if(resultmodel.arrayocrBackSideDataKey.count == 0) {
|
|
1799
|
+
flipAnimation()
|
|
1800
|
+
// playSound()
|
|
1801
|
+
return
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
var results:[String: Any] = [:]
|
|
1806
|
+
var frontData:[String: Any] = [:]
|
|
1807
|
+
var backData:[String: Any] = [:]
|
|
1808
|
+
var mrzData:[String: Any] = [:]
|
|
1809
|
+
if let faceUri = AccurascanKyc.getImageUri(img: resultmodel.faceImage, name: nil) {
|
|
1810
|
+
results["face"] = faceUri
|
|
1811
|
+
}
|
|
1812
|
+
if let frontUri = AccurascanKyc.getImageUri(img: resultmodel.frontSideImage, name: nil) {
|
|
1813
|
+
results["front_img"] = frontUri
|
|
1814
|
+
}
|
|
1815
|
+
if let backUri = AccurascanKyc.getImageUri(img: resultmodel.backSideImage, name: nil) {
|
|
1816
|
+
results["back_img"] = backUri
|
|
1817
|
+
}
|
|
1818
|
+
self.dictFaceDataFront = resultmodel.ocrFaceFrontData
|
|
1819
|
+
for data in dictFaceDataFront {
|
|
1820
|
+
if let k = data.key as? String {
|
|
1821
|
+
if k == "Signature" {
|
|
1822
|
+
if let base64img = data.value as? String {
|
|
1823
|
+
let dataDecoded : Data = Data(base64Encoded: base64img, options: .ignoreUnknownCharacters)!
|
|
1824
|
+
let decodedimage:UIImage = UIImage(data: dataDecoded)!
|
|
1825
|
+
if let sigUri = AccurascanKyc.getImageUri(img: decodedimage, name: nil) {
|
|
1826
|
+
frontData["signature"] = sigUri
|
|
1827
|
+
}
|
|
1828
|
+
}
|
|
1829
|
+
} else {
|
|
1830
|
+
frontData[k] = data.value as? String ?? data.value as? Int ?? ""
|
|
1831
|
+
}
|
|
1832
|
+
}
|
|
1833
|
+
|
|
1834
|
+
}
|
|
1835
|
+
|
|
1836
|
+
self.dictFaceDataBack = resultmodel.ocrFaceBackData
|
|
1837
|
+
for data in dictFaceDataBack {
|
|
1838
|
+
if let k = data.key as? String {
|
|
1839
|
+
if k == "Signature" {
|
|
1840
|
+
if let base64img = data.value as? String {
|
|
1841
|
+
let dataDecoded : Data = Data(base64Encoded: base64img, options: .ignoreUnknownCharacters)!
|
|
1842
|
+
let decodedimage:UIImage = UIImage(data: dataDecoded)!
|
|
1843
|
+
if let sigUri = AccurascanKyc.getImageUri(img: decodedimage, name: nil) {
|
|
1844
|
+
backData["signature"] = sigUri
|
|
1845
|
+
}
|
|
1846
|
+
}
|
|
1847
|
+
} else {
|
|
1848
|
+
backData[k] = data.value as? String ?? data.value as? Int ?? ""
|
|
1849
|
+
}
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
self.dictSecuretyData = resultmodel.ocrSecurityData
|
|
1855
|
+
for data in dictSecuretyData {
|
|
1856
|
+
frontData[data.key as! String] = data.value as? String ?? data.value as? Int ?? ""
|
|
1857
|
+
}
|
|
1858
|
+
|
|
1859
|
+
self.arrFrontResultKey = resultmodel.arrayocrFrontSideDataKey as! [String]
|
|
1860
|
+
self.arrFrontResultValue = resultmodel.arrayocrFrontSideDataValue as! [String]
|
|
1861
|
+
for i in arrFrontResultKey.indices {
|
|
1862
|
+
if arrFrontResultKey[i] != "MRZ" {
|
|
1863
|
+
frontData[arrFrontResultKey[i]] = arrFrontResultValue[i]
|
|
1864
|
+
} else {
|
|
1865
|
+
self.shareScanningListing = resultmodel.shareScanningMRZListing
|
|
1866
|
+
let kK = shareScanningListing.allKeys
|
|
1867
|
+
let vV = shareScanningListing.allValues
|
|
1868
|
+
let dD : NSMutableDictionary = [:]
|
|
1869
|
+
for i in (0 ..< kK.count) {
|
|
1870
|
+
if (kK[i] as! String != "fontImageRotation") && (kK[i] as! String != "backImageRotation"){
|
|
1871
|
+
if kK[i] as! String == "birth" || kK[i] as! String == "expirationDate" || kK[i] as! String == "issuedate" || kK[i] as! String == "issueDate"{
|
|
1872
|
+
let daTE = date(toFormatedDate: (vV[i] as! String))
|
|
1873
|
+
dD.setValue(daTE, forKey: (kK[i] as? String)!)
|
|
1874
|
+
}else{
|
|
1875
|
+
dD.setValue(vV[i] as? String, forKey: (kK[i] as? String)!)
|
|
1876
|
+
}
|
|
1877
|
+
}
|
|
1878
|
+
}
|
|
1879
|
+
mrzData = dD as! [String : Any] //self.getMRZKeyValue()
|
|
1880
|
+
// mrzData["Other Id2"] = shareScanningListing["personalNumber2"]
|
|
1881
|
+
// mrzData["Document Type"] = shareScanningListing["passportType"]
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
|
|
1885
|
+
self.arrBackResultKey = resultmodel.arrayocrBackSideDataKey as! [String]
|
|
1886
|
+
self.arrBackResultValue = resultmodel.arrayocrBackSideDataValue as! [String]
|
|
1887
|
+
for i in arrBackResultKey.indices {
|
|
1888
|
+
if arrBackResultKey[i] != "MRZ" {
|
|
1889
|
+
backData[arrBackResultKey[i]] = arrBackResultValue[i]
|
|
1890
|
+
} else {
|
|
1891
|
+
self.shareScanningListing = resultmodel.shareScanningMRZListing
|
|
1892
|
+
let kK = shareScanningListing.allKeys
|
|
1893
|
+
let vV = shareScanningListing.allValues
|
|
1894
|
+
let dD : NSMutableDictionary = [:]
|
|
1895
|
+
for i in (0 ..< kK.count) {
|
|
1896
|
+
if (kK[i] as! String != "fontImageRotation") && (kK[i] as! String != "backImageRotation"){
|
|
1897
|
+
if kK[i] as! String == "birth" || kK[i] as! String == "expirationDate" || kK[i] as! String == "issuedate" || kK[i] as! String == "issueDate"{
|
|
1898
|
+
let daTE = date(toFormatedDate: (vV[i] as! String))
|
|
1899
|
+
dD.setValue(daTE, forKey: (kK[i] as? String)!)
|
|
1900
|
+
}else{
|
|
1901
|
+
dD.setValue(vV[i] as? String, forKey: (kK[i] as? String)!)
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1904
|
+
}
|
|
1905
|
+
}
|
|
1906
|
+
mrzData = dD as! [String : Any] //self.getMRZKeyValue()
|
|
1907
|
+
// mrzData["Other Id2"] = shareScanningListing["personalNumber2"]
|
|
1908
|
+
// mrzData["Document Type"] = shareScanningListing["passportType"]
|
|
1909
|
+
}
|
|
1910
|
+
}
|
|
1911
|
+
|
|
1912
|
+
results["front_data"] = frontData
|
|
1913
|
+
results["back_data"] = backData
|
|
1914
|
+
results["mrz_data"] = mrzData
|
|
1915
|
+
results["type"] = "OCR"
|
|
1916
|
+
|
|
1917
|
+
callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
1918
|
+
self.dismiss(animated: true)
|
|
1919
|
+
}
|
|
1920
|
+
|
|
1921
|
+
func screenSound() {
|
|
1922
|
+
AudioServicesPlaySystemSound(SystemSoundID(1315))
|
|
1923
|
+
if !self.isflipanimation!{
|
|
1924
|
+
self.isflipanimation = true
|
|
1925
|
+
self.flipAnimation()
|
|
1926
|
+
}
|
|
1927
|
+
|
|
1928
|
+
}
|
|
1929
|
+
|
|
1930
|
+
func recognizeSucceedBarcode(_ message: String!, back BackSideImage: UIImage!, frontImage FrontImage: UIImage!, face FaceImage: UIImage!) {
|
|
1931
|
+
var results:[String: Any] = [:]
|
|
1932
|
+
var frontData:[String: Any] = [:]
|
|
1933
|
+
// var backData:[String: Any] = [:]
|
|
1934
|
+
|
|
1935
|
+
if FrontImage != nil {
|
|
1936
|
+
// imgViewFront = FrontImage
|
|
1937
|
+
if let frontUri = AccurascanKyc.getImageUri(img: FrontImage!, name: nil) {
|
|
1938
|
+
results["front_img"] = frontUri
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
if BackSideImage != nil {
|
|
1942
|
+
// imgViewBack = BackSideImage
|
|
1943
|
+
if let frontUri = AccurascanKyc.getImageUri(img: BackSideImage!, name: nil) {
|
|
1944
|
+
results["back_img"] = frontUri
|
|
1945
|
+
}
|
|
1946
|
+
}
|
|
1947
|
+
if FaceImage != nil {
|
|
1948
|
+
if let frontUri = AccurascanKyc.getImageUri(img: FaceImage!, name: nil) {
|
|
1949
|
+
results["face"] = frontUri
|
|
1950
|
+
}
|
|
1951
|
+
// photoImage1 = FaceImage
|
|
1952
|
+
}
|
|
1953
|
+
if(isBarcodeEnabled){
|
|
1954
|
+
let isPDF = self.decodework(type: message)
|
|
1955
|
+
if(isPDF && isResultShow == false)
|
|
1956
|
+
{
|
|
1957
|
+
|
|
1958
|
+
isResultShow = true
|
|
1959
|
+
self.accuraCameraWrapper?.stopCamera()
|
|
1960
|
+
AudioServicesPlaySystemSound(1315)
|
|
1961
|
+
if(isPDF)
|
|
1962
|
+
{
|
|
1963
|
+
if cardType != 1 {
|
|
1964
|
+
results["type"] = "BARCODEPDF417"
|
|
1965
|
+
}
|
|
1966
|
+
let kArr = keyArr as! [String]
|
|
1967
|
+
let valArr = valueArr as! [String]
|
|
1968
|
+
for i in kArr.indices {
|
|
1969
|
+
frontData[kArr[i]] = valArr[i]
|
|
1970
|
+
}
|
|
1971
|
+
frontData["PDF417"] = message
|
|
1972
|
+
results["front_data"] = frontData
|
|
1973
|
+
callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
1974
|
+
self.dismiss(animated: true)
|
|
1975
|
+
}
|
|
1976
|
+
else{
|
|
1977
|
+
results["type"] = "BARCODE"
|
|
1978
|
+
frontData["barcode"] = message
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
else{
|
|
1982
|
+
|
|
1983
|
+
isResultShow = true
|
|
1984
|
+
// mainV.removeAlert()
|
|
1985
|
+
self.accuraCameraWrapper?.stopCamera()
|
|
1986
|
+
if(isPDF)
|
|
1987
|
+
{
|
|
1988
|
+
if cardType != 1 {
|
|
1989
|
+
results["type"] = "BARCODEPDF417"
|
|
1990
|
+
}
|
|
1991
|
+
let kArr = keyArr as! [String]
|
|
1992
|
+
let valArr = valueArr as! [String]
|
|
1993
|
+
for i in kArr.indices {
|
|
1994
|
+
frontData[kArr[i]] = valArr[i]
|
|
1995
|
+
}
|
|
1996
|
+
frontData["PDF417"] = message
|
|
1997
|
+
results["front_data"] = frontData
|
|
1998
|
+
callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
1999
|
+
self.dismiss(animated: true)
|
|
2000
|
+
}
|
|
2001
|
+
else{
|
|
2002
|
+
results["type"] = "BARCODE"
|
|
2003
|
+
frontData["barcode"] = message
|
|
2004
|
+
results["front_data"] = frontData
|
|
2005
|
+
callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
2006
|
+
self.dismiss(animated: true)
|
|
2007
|
+
}
|
|
2008
|
+
}
|
|
2009
|
+
// if(isPDF)
|
|
2010
|
+
// {
|
|
2011
|
+
// if cardType != 1 {
|
|
2012
|
+
// results["type"] = "BARCODEPDF417"
|
|
2013
|
+
// }
|
|
2014
|
+
// let kArr = keyArr as! [String]
|
|
2015
|
+
// let valArr = valueArr as! [String]
|
|
2016
|
+
// for i in kArr.indices {
|
|
2017
|
+
// frontData[kArr[i]] = valArr[i]
|
|
2018
|
+
// }
|
|
2019
|
+
// frontData["PDF417"] = message
|
|
2020
|
+
// }
|
|
2021
|
+
// else{
|
|
2022
|
+
// results["type"] = "BARCODE"
|
|
2023
|
+
// frontData["barcode"] = message
|
|
2024
|
+
// results["front_data"] = frontData
|
|
2025
|
+
// }
|
|
2026
|
+
// callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
2027
|
+
// self.dismiss(animated: true)
|
|
2028
|
+
}
|
|
2029
|
+
else{
|
|
2030
|
+
if(message != "") {
|
|
2031
|
+
// barcodeData = message
|
|
2032
|
+
}
|
|
2033
|
+
if(BackSideImage == nil) {
|
|
2034
|
+
frontData["barcode"] = message
|
|
2035
|
+
frontData["front_data"] = frontData
|
|
2036
|
+
DispatchQueue.main.async {
|
|
2037
|
+
self.accuraCameraWrapper?.cardSide(.BACK_CARD_SCAN)
|
|
2038
|
+
}
|
|
2039
|
+
self.flipAnimation()
|
|
2040
|
+
|
|
2041
|
+
} else if (FrontImage == nil) {
|
|
2042
|
+
self.accuraCameraWrapper?.cardSide(.FRONT_CARD_SCAN)
|
|
2043
|
+
self.flipAnimation()
|
|
2044
|
+
}else {
|
|
2045
|
+
let isPDF = self.decodework(type: message)
|
|
2046
|
+
if(isPDF)
|
|
2047
|
+
{
|
|
2048
|
+
if cardType != 1 {
|
|
2049
|
+
results["type"] = "BARCODEPDF417"
|
|
2050
|
+
}
|
|
2051
|
+
let kArr = keyArr as! [String]
|
|
2052
|
+
let valArr = valueArr as! [String]
|
|
2053
|
+
for i in kArr.indices {
|
|
2054
|
+
frontData[kArr[i]] = valArr[i]
|
|
2055
|
+
}
|
|
2056
|
+
frontData["PDF417"] = message
|
|
2057
|
+
}
|
|
2058
|
+
else{
|
|
2059
|
+
results["type"] = "BARCODE"
|
|
2060
|
+
frontData["barcode"] = message
|
|
2061
|
+
}
|
|
2062
|
+
if(isPDF && isResultShow == false)
|
|
2063
|
+
{
|
|
2064
|
+
if(isPDF)
|
|
2065
|
+
{
|
|
2066
|
+
if cardType != 1 {
|
|
2067
|
+
results["type"] = "BARCODEPDF417"
|
|
2068
|
+
}
|
|
2069
|
+
let kArr = keyArr as! [String]
|
|
2070
|
+
let valArr = valueArr as! [String]
|
|
2071
|
+
for i in kArr.indices {
|
|
2072
|
+
frontData[kArr[i]] = valArr[i]
|
|
2073
|
+
}
|
|
2074
|
+
frontData["PDF417"] = message
|
|
2075
|
+
}
|
|
2076
|
+
else{
|
|
2077
|
+
results["type"] = "BARCODE"
|
|
2078
|
+
frontData["barcode"] = message
|
|
2079
|
+
}
|
|
2080
|
+
isResultShow = true
|
|
2081
|
+
results["back_data"] = frontData
|
|
2082
|
+
callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
2083
|
+
self.dismiss(animated: true)
|
|
2084
|
+
AudioServicesPlaySystemSound(1315)
|
|
2085
|
+
|
|
2086
|
+
}
|
|
2087
|
+
}
|
|
2088
|
+
|
|
2089
|
+
}
|
|
2090
|
+
|
|
2091
|
+
}
|
|
2092
|
+
|
|
2093
|
+
// func recognizeSucceedBarcode(_ message: String!){
|
|
2094
|
+
//
|
|
2095
|
+
// }
|
|
2096
|
+
|
|
2097
|
+
|
|
2098
|
+
func processedImage(_ image: UIImage!) {
|
|
2099
|
+
// _imageView.image = image
|
|
2100
|
+
}
|
|
2101
|
+
|
|
2102
|
+
func recognizeFailed(_ message: String!) {
|
|
2103
|
+
let alert = UIAlertController(title: "AccuraSDK", message: message, preferredStyle: .alert)
|
|
2104
|
+
let yesButton = UIAlertAction(title: "OK", style: .default) { _ in
|
|
2105
|
+
}
|
|
2106
|
+
alert.addAction(yesButton)
|
|
2107
|
+
self.present(alert, animated: true, completion: nil)
|
|
2108
|
+
}
|
|
2109
|
+
|
|
2110
|
+
func recognizeSucceed(_ scanedInfo: NSMutableDictionary!, recType: RecType, bRecDone: Bool, bFaceReplace: Bool, bMrzFirst: Bool, photoImage: UIImage, docFrontImage: UIImage!, docbackImage: UIImage!) {
|
|
2111
|
+
|
|
2112
|
+
var results:[String: Any] = [:]
|
|
2113
|
+
if(bMrzFirst)
|
|
2114
|
+
{
|
|
2115
|
+
if isBackSide!{
|
|
2116
|
+
if docbackImage != nil {
|
|
2117
|
+
if let frontUri = AccurascanKyc.getImageUri(img: docbackImage, name: nil) {
|
|
2118
|
+
results["back_img"] = frontUri
|
|
2119
|
+
}
|
|
2120
|
+
}
|
|
2121
|
+
documentImage = docbackImage
|
|
2122
|
+
if(docFrontImage != nil) {
|
|
2123
|
+
if let frontUri = AccurascanKyc.getImageUri(img: docFrontImage, name: nil) {
|
|
2124
|
+
results["front_img"] = frontUri
|
|
2125
|
+
}
|
|
2126
|
+
// self.docfrontImage = docFrontImage
|
|
2127
|
+
}
|
|
2128
|
+
}else{
|
|
2129
|
+
documentImage = nil
|
|
2130
|
+
if let frontUri = AccurascanKyc.getImageUri(img: docFrontImage, name: nil) {
|
|
2131
|
+
results["front_img"] = frontUri
|
|
2132
|
+
}
|
|
2133
|
+
self.docfrontImage = docFrontImage
|
|
2134
|
+
|
|
2135
|
+
}
|
|
2136
|
+
self.imageRotation(rotation: "BackImg")
|
|
2137
|
+
self.accuraCameraWrapper?.stopCamera()
|
|
2138
|
+
self._imageView.image = nil
|
|
2139
|
+
|
|
2140
|
+
AudioServicesPlaySystemSound(1315)
|
|
2141
|
+
|
|
2142
|
+
self.shareScanningListing = scanedInfo
|
|
2143
|
+
let shareScanningListing: NSMutableDictionary = self.shareScanningListing
|
|
2144
|
+
if documentImage != nil{
|
|
2145
|
+
shareScanningListing["documentImage"] = documentImage?.jpegData(compressionQuality: 1.0)
|
|
2146
|
+
}
|
|
2147
|
+
shareScanningListing["docfrontImage"] = docfrontImage?.jpegData(compressionQuality: 1.0)
|
|
2148
|
+
shareScanningListing["fontImageRotation"] = frontImageRotation
|
|
2149
|
+
shareScanningListing["backImageRotation"] = backImageRotation
|
|
2150
|
+
var mrzData:[String: String] = [:]
|
|
2151
|
+
if let frontUri = AccurascanKyc.getImageUri(img: photoImage, name: nil){
|
|
2152
|
+
results["face"] = frontUri
|
|
2153
|
+
}
|
|
2154
|
+
let kK = shareScanningListing.allKeys
|
|
2155
|
+
let vV = shareScanningListing.allValues
|
|
2156
|
+
let dD : NSMutableDictionary = [:]
|
|
2157
|
+
for i in (0 ..< kK.count) {
|
|
2158
|
+
if (kK[i] as! String != "fontImageRotation") && (kK[i] as! String != "backImageRotation"){
|
|
2159
|
+
if kK[i] as! String == "birth" || kK[i] as! String == "expirationDate" || kK[i] as! String == "issuedate" || kK[i] as! String == "issueDate"{
|
|
2160
|
+
let daTE = date(toFormatedDate: (vV[i] as! String))
|
|
2161
|
+
dD.setValue(daTE, forKey: (kK[i] as? String)!)
|
|
2162
|
+
}else{
|
|
2163
|
+
dD.setValue(vV[i] as? String, forKey: (kK[i] as? String)!)
|
|
2164
|
+
}
|
|
2165
|
+
}
|
|
2166
|
+
}
|
|
2167
|
+
print("\(shareScanningListing)")
|
|
2168
|
+
mrzData = dD as! [String : String]//self.getMRZKeyValue()
|
|
2169
|
+
results["mrz_data"] = mrzData
|
|
2170
|
+
callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
2171
|
+
self.dismiss(animated: true)
|
|
2172
|
+
}
|
|
2173
|
+
else{
|
|
2174
|
+
countface += 1
|
|
2175
|
+
if !isBackSide!{
|
|
2176
|
+
if(countface > 2)
|
|
2177
|
+
{
|
|
2178
|
+
countface = 0
|
|
2179
|
+
self.docfrontImage = self._imageView.image
|
|
2180
|
+
self.imageRotation(rotation: "FrontImage")
|
|
2181
|
+
isBackSide = true
|
|
2182
|
+
self.flipAnimation()
|
|
2183
|
+
// return
|
|
2184
|
+
}
|
|
2185
|
+
}
|
|
2186
|
+
else{
|
|
2187
|
+
return
|
|
2188
|
+
}
|
|
2189
|
+
}
|
|
2190
|
+
}
|
|
2191
|
+
|
|
2192
|
+
|
|
2193
|
+
func recognizSuccessBankCard(_ cardDetail: NSMutableDictionary!, andBankCardImage bankCardImage: UIImage!) {
|
|
2194
|
+
var results:[String: Any] = [:]
|
|
2195
|
+
var frontData:[String: Any] = [:]
|
|
2196
|
+
// let backData:[String: Any] = [:]
|
|
2197
|
+
if let frontUri = AccurascanKyc.getImageUri(img: bankCardImage, name: nil) {
|
|
2198
|
+
results["front_img"] = frontUri
|
|
2199
|
+
}
|
|
2200
|
+
for data in cardDetail {
|
|
2201
|
+
frontData[data.key as! String] = data.value as? String ?? data.value as? Int ?? ""
|
|
2202
|
+
}
|
|
2203
|
+
results["front_data"] = frontData
|
|
2204
|
+
// results["back_data"] = backData
|
|
2205
|
+
results["type"] = "BANKCARD"
|
|
2206
|
+
|
|
2207
|
+
callBack!([NSNull(),AccurascanKyc.convertJSONString(results:results)])
|
|
2208
|
+
self.dismiss(animated: true)
|
|
2209
|
+
// let vc : ShowResultVC = self.storyboard?.instantiateViewController(withIdentifier: "ShowResultVC") as! ShowResultVC
|
|
2210
|
+
// vc.scannedData = cardDetail
|
|
2211
|
+
// vc.pageType = .BankCard
|
|
2212
|
+
// vc.bankCardImage = bankCardImage
|
|
2213
|
+
// self.navigationController?.pushViewController(vc, animated: true)
|
|
2214
|
+
}
|
|
2215
|
+
|
|
2216
|
+
func matchedItem(_ image: UIImage!, isCardSide1 cs: Bool, isBack b: Bool, isFront f: Bool, imagePhoto imgp: UIImage!, imageResult: UIImage!) {
|
|
2217
|
+
if f == true{
|
|
2218
|
+
imgViewCardFront = imageResult
|
|
2219
|
+
}else{
|
|
2220
|
+
imgViewCard = imageResult
|
|
2221
|
+
}
|
|
2222
|
+
isCardSide = cs
|
|
2223
|
+
isBack = b
|
|
2224
|
+
isFront = f
|
|
2225
|
+
}
|
|
2226
|
+
|
|
2227
|
+
|
|
2228
|
+
func passDataOtherViewController(){
|
|
2229
|
+
|
|
2230
|
+
}
|
|
2231
|
+
|
|
2232
|
+
func imageRotation(rotation: String) {
|
|
2233
|
+
var strRotation = ""
|
|
2234
|
+
if UIDevice.current.orientation == .landscapeRight {
|
|
2235
|
+
strRotation = "Right"
|
|
2236
|
+
} else if UIDevice.current.orientation == .landscapeLeft {
|
|
2237
|
+
strRotation = "Left"
|
|
2238
|
+
}
|
|
2239
|
+
if rotation == "FrontImg" {
|
|
2240
|
+
frontImageRotation = strRotation
|
|
2241
|
+
} else if rotation == "BackImg" {
|
|
2242
|
+
backImageRotation = strRotation
|
|
2243
|
+
} else {
|
|
2244
|
+
frontImageRotation = strRotation
|
|
2245
|
+
}
|
|
2246
|
+
}
|
|
2247
|
+
func reco_msg(_ message: String!) {
|
|
2248
|
+
var msg = String();
|
|
2249
|
+
if(message == ACCURA_ERROR_CODE_MOTION) {
|
|
2250
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_MOTION"] != nil{
|
|
2251
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_MOTION"] as! String
|
|
2252
|
+
|
|
2253
|
+
}else{
|
|
2254
|
+
msg = "Keep Document Steady";
|
|
2255
|
+
}
|
|
2256
|
+
} else if(message == ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME) {
|
|
2257
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME"] != nil{
|
|
2258
|
+
|
|
2259
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME"] as! String
|
|
2260
|
+
|
|
2261
|
+
}else{
|
|
2262
|
+
msg = "Keep document in frame";
|
|
2263
|
+
}
|
|
2264
|
+
} else if(message == ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME) {
|
|
2265
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME"] != nil{
|
|
2266
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME"] as! String
|
|
2267
|
+
|
|
2268
|
+
}else{
|
|
2269
|
+
msg = "Bring card near to frame";
|
|
2270
|
+
}
|
|
2271
|
+
} else if(message == ACCURA_ERROR_CODE_PROCESSING) {
|
|
2272
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_PROCESSING"] != nil{
|
|
2273
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_PROCESSING"] as! String
|
|
2274
|
+
|
|
2275
|
+
}else{
|
|
2276
|
+
msg = "Processing...";
|
|
2277
|
+
}
|
|
2278
|
+
} else if(message == ACCURA_ERROR_CODE_BLUR_DOCUMENT) {
|
|
2279
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_BLUR_DOCUMENT"] != nil{
|
|
2280
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_BLUR_DOCUMENT"] as! String
|
|
2281
|
+
|
|
2282
|
+
}else{
|
|
2283
|
+
msg = "Blur detect in document";
|
|
2284
|
+
}
|
|
2285
|
+
} else if(message == ACCURA_ERROR_CODE_FACE_BLUR) {
|
|
2286
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_FACE_BLUR"] != nil{
|
|
2287
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_FACE_BLUR"] as! String
|
|
2288
|
+
|
|
2289
|
+
}else{
|
|
2290
|
+
msg = "Blur detected over face";
|
|
2291
|
+
}
|
|
2292
|
+
} else if(message == ACCURA_ERROR_CODE_GLARE_DOCUMENT) {
|
|
2293
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_GLARE_DOCUMENT"] != nil{
|
|
2294
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_GLARE_DOCUMENT"] as! String
|
|
2295
|
+
|
|
2296
|
+
}else{
|
|
2297
|
+
msg = "Glare detect in document";
|
|
2298
|
+
}
|
|
2299
|
+
} else if(message == ACCURA_ERROR_CODE_HOLOGRAM) {
|
|
2300
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_HOLOGRAM"] != nil{
|
|
2301
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_HOLOGRAM"] as! String
|
|
2302
|
+
|
|
2303
|
+
}else{
|
|
2304
|
+
msg = "Hologram Detected";
|
|
2305
|
+
}
|
|
2306
|
+
} else if(message == ACCURA_ERROR_CODE_DARK_DOCUMENT) {
|
|
2307
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_DARK_DOCUMENT"] != nil{
|
|
2308
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_DARK_DOCUMENT"] as! String
|
|
2309
|
+
|
|
2310
|
+
}else{
|
|
2311
|
+
msg = "Low lighting detected";
|
|
2312
|
+
}
|
|
2313
|
+
} else if(message == ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT) {
|
|
2314
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT"] != nil{
|
|
2315
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT"] as! String
|
|
2316
|
+
|
|
2317
|
+
}else{
|
|
2318
|
+
msg = "Can not accept Photo Copy Document";
|
|
2319
|
+
}
|
|
2320
|
+
} else if(message == ACCURA_ERROR_CODE_FACE) {
|
|
2321
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_FACE"] != nil{
|
|
2322
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_FACE"] as! String
|
|
2323
|
+
|
|
2324
|
+
}else{
|
|
2325
|
+
msg = "Face not detected";
|
|
2326
|
+
}
|
|
2327
|
+
} else if(message == ACCURA_ERROR_CODE_MRZ) {
|
|
2328
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_MRZ"] != nil{
|
|
2329
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_MRZ"] as! String
|
|
2330
|
+
|
|
2331
|
+
}else{
|
|
2332
|
+
msg = "MRZ not detected";
|
|
2333
|
+
}
|
|
2334
|
+
} else if(message == ACCURA_ERROR_CODE_PASSPORT_MRZ) {
|
|
2335
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_PASSPORT_MRZ"] != nil{
|
|
2336
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_PASSPORT_MRZ"] as! String
|
|
2337
|
+
|
|
2338
|
+
}else{
|
|
2339
|
+
msg = "Passport MRZ not detected";
|
|
2340
|
+
}
|
|
2341
|
+
} else if(message == ACCURA_ERROR_CODE_ID_MRZ) {
|
|
2342
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_ID_MRZ"] != nil{
|
|
2343
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_ID_MRZ"] as! String
|
|
2344
|
+
|
|
2345
|
+
}else{
|
|
2346
|
+
msg = "ID MRZ not detected"
|
|
2347
|
+
}
|
|
2348
|
+
} else if(message == ACCURA_ERROR_CODE_VISA_MRZ) {
|
|
2349
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_VISA_MRZ"] != nil{
|
|
2350
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_VISA_MRZ"] as! String
|
|
2351
|
+
|
|
2352
|
+
}else{
|
|
2353
|
+
msg = "Visa MRZ not detected"
|
|
2354
|
+
}
|
|
2355
|
+
}else if(message == ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE) {
|
|
2356
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE"] != nil{
|
|
2357
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE"] as! String
|
|
2358
|
+
|
|
2359
|
+
}else{
|
|
2360
|
+
msg = "Document is upside down. Place it properly"
|
|
2361
|
+
}
|
|
2362
|
+
}else if(message == ACCURA_ERROR_CODE_WRONG_SIDE) {
|
|
2363
|
+
if accuraErrorCode["ACCURA_ERROR_CODE_WRONG_SIDE"] != nil{
|
|
2364
|
+
msg = accuraErrorCode["ACCURA_ERROR_CODE_WRONG_SIDE"] as! String
|
|
2365
|
+
|
|
2366
|
+
}else{
|
|
2367
|
+
msg = "Scanning wrong side of Document"
|
|
2368
|
+
}
|
|
2369
|
+
}else {
|
|
2370
|
+
msg = message;
|
|
2371
|
+
}
|
|
2372
|
+
lblOCRMsg.text = msg
|
|
2373
|
+
}
|
|
2374
|
+
|
|
2375
|
+
|
|
2376
|
+
|
|
2377
|
+
func reco_titleMessage(_ messageCode: Int32) {
|
|
2378
|
+
print("msgcode:- ",messageCode)
|
|
2379
|
+
switch messageCode {
|
|
2380
|
+
case SCAN_TITLE_OCR_FRONT:
|
|
2381
|
+
if accuraTitleMsg["SCAN_TITLE_OCR_FRONT"] != nil {
|
|
2382
|
+
var frontMsg = accuraTitleMsg["SCAN_TITLE_OCR_FRONT"] as? String;
|
|
2383
|
+
frontMsg = frontMsg!.appending(docName)
|
|
2384
|
+
_lblTitle.text = frontMsg
|
|
2385
|
+
break
|
|
2386
|
+
}else{
|
|
2387
|
+
var frontMsg = "Scan Front side of ";
|
|
2388
|
+
frontMsg = frontMsg.appending(docName)
|
|
2389
|
+
_lblTitle.text = frontMsg
|
|
2390
|
+
break
|
|
2391
|
+
}
|
|
2392
|
+
case SCAN_TITLE_OCR_BACK:
|
|
2393
|
+
|
|
2394
|
+
if accuraTitleMsg["SCAN_TITLE_OCR_BACK"] != nil {
|
|
2395
|
+
var backMsg = accuraTitleMsg["SCAN_TITLE_OCR_BACK"] as? String;
|
|
2396
|
+
backMsg = backMsg!.appending(docName)
|
|
2397
|
+
self._lblTitle.text = backMsg
|
|
2398
|
+
|
|
2399
|
+
break
|
|
2400
|
+
}else{
|
|
2401
|
+
var backMsg = "Scan Back side of ";
|
|
2402
|
+
backMsg = backMsg.appending(docName)
|
|
2403
|
+
DispatchQueue.main.async {
|
|
2404
|
+
self._lblTitle.text = backMsg
|
|
2405
|
+
}
|
|
2406
|
+
break
|
|
2407
|
+
}
|
|
2408
|
+
case SCAN_TITLE_OCR:
|
|
2409
|
+
if accuraTitleMsg["SCAN_TITLE_OCR"] != nil {
|
|
2410
|
+
var backMsg = accuraTitleMsg["SCAN_TITLE_OCR"] as? String;
|
|
2411
|
+
backMsg = backMsg!.appending(docName)
|
|
2412
|
+
_lblTitle.text = backMsg
|
|
2413
|
+
break
|
|
2414
|
+
}else{
|
|
2415
|
+
var backMsg = "Scan ";
|
|
2416
|
+
backMsg = backMsg.appending(docName)
|
|
2417
|
+
_lblTitle.text = backMsg
|
|
2418
|
+
break
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
case SCAN_TITLE_MRZ_PDF417_FRONT:
|
|
2422
|
+
if accuraTitleMsg["SCAN_TITLE_MRZ_PDF417_FRONT"] != nil {
|
|
2423
|
+
_lblTitle.text = accuraTitleMsg["SCAN_TITLE_MRZ_PDF417_FRONT"] as? String;
|
|
2424
|
+
break
|
|
2425
|
+
}else{
|
|
2426
|
+
_lblTitle.text = "Scan Front Side of Document"
|
|
2427
|
+
break
|
|
2428
|
+
}
|
|
2429
|
+
case SCAN_TITLE_MRZ_PDF417_BACK:
|
|
2430
|
+
if accuraTitleMsg["SCAN_TITLE_MRZ_PDF417_BACK"] != nil {
|
|
2431
|
+
DispatchQueue.main.async {
|
|
2432
|
+
self._lblTitle.text = self.accuraTitleMsg["SCAN_TITLE_MRZ_PDF417_BACK"] as? String;
|
|
2433
|
+
|
|
2434
|
+
}
|
|
2435
|
+
break
|
|
2436
|
+
}else{
|
|
2437
|
+
DispatchQueue.main.async {
|
|
2438
|
+
self._lblTitle.text = "Scan Back Side of Document"
|
|
2439
|
+
|
|
2440
|
+
}
|
|
2441
|
+
break
|
|
2442
|
+
}
|
|
2443
|
+
|
|
2444
|
+
case SCAN_TITLE_DLPLATE:
|
|
2445
|
+
if accuraTitleMsg["SCAN_TITLE_DLPLATE"] != nil {
|
|
2446
|
+
|
|
2447
|
+
_lblTitle.text = accuraTitleMsg["SCAN_TITLE_DLPLATE"] as? String;
|
|
2448
|
+
break
|
|
2449
|
+
}else{
|
|
2450
|
+
_lblTitle.text = "Scan Number plate"
|
|
2451
|
+
break
|
|
2452
|
+
}
|
|
2453
|
+
|
|
2454
|
+
case SCAN_TITLE_BARCODE:
|
|
2455
|
+
if accuraTitleMsg["SCAN_TITLE_BARCODE"] != nil {
|
|
2456
|
+
_lblTitle.text = accuraTitleMsg["SCAN_TITLE_BARCODE"] as? String;
|
|
2457
|
+
break
|
|
2458
|
+
}else{
|
|
2459
|
+
_lblTitle.text = "Scan Barcode"
|
|
2460
|
+
break
|
|
2461
|
+
}
|
|
2462
|
+
|
|
2463
|
+
case SCAN_TITLE_BANKCARD:
|
|
2464
|
+
if accuraTitleMsg["SCAN_TITLE_BANKCARD"] != nil {
|
|
2465
|
+
_lblTitle.text = accuraTitleMsg["SCAN_TITLE_BANKCARD"] as? String;
|
|
2466
|
+
break
|
|
2467
|
+
}else{
|
|
2468
|
+
_lblTitle.text = "Scan BankCard"
|
|
2469
|
+
break
|
|
2470
|
+
}
|
|
2471
|
+
default:
|
|
2472
|
+
break
|
|
2473
|
+
}
|
|
2474
|
+
}
|
|
2475
|
+
|
|
2476
|
+
func getMRZKeyValue() -> [String: String] {
|
|
2477
|
+
var mrzData:[String: String] = [:]
|
|
2478
|
+
print("\(shareScanningListing)")
|
|
2479
|
+
if let line = shareScanningListing["lines"] as? String {
|
|
2480
|
+
mrzData["MRZ"] = line
|
|
2481
|
+
|
|
2482
|
+
}
|
|
2483
|
+
if let givenname = shareScanningListing["givenname"] as? String {
|
|
2484
|
+
mrzData["First Name"] = givenname
|
|
2485
|
+
} else if let givenname = shareScanningListing["givenNames"] as? String {
|
|
2486
|
+
mrzData["First Name"] = givenname
|
|
2487
|
+
}
|
|
2488
|
+
|
|
2489
|
+
if let surname = shareScanningListing["surname"] as? String {
|
|
2490
|
+
mrzData["Last Name"] = surname
|
|
2491
|
+
|
|
2492
|
+
} else if let surname = shareScanningListing["surName"] as? String {
|
|
2493
|
+
mrzData["Last Name"] = surname
|
|
2494
|
+
|
|
2495
|
+
}
|
|
2496
|
+
|
|
2497
|
+
if let docnumber = shareScanningListing["passportNumber"] as? String {
|
|
2498
|
+
mrzData["Document No."] = docnumber
|
|
2499
|
+
|
|
2500
|
+
} else if let docnumber = shareScanningListing["docNumber"] as? String {
|
|
2501
|
+
mrzData["Document No."] = docnumber
|
|
2502
|
+
|
|
2503
|
+
}
|
|
2504
|
+
if let documentType = shareScanningListing["passportType"] as? String {
|
|
2505
|
+
mrzData["Document Type"] = documentType
|
|
2506
|
+
|
|
2507
|
+
} else if let docnumber = shareScanningListing["docNumber"] as? String {
|
|
2508
|
+
mrzData["Document No."] = docnumber
|
|
2509
|
+
|
|
2510
|
+
}
|
|
2511
|
+
|
|
2512
|
+
if let docchecksum = shareScanningListing["docchecksum"] as? String {
|
|
2513
|
+
mrzData["Document check No."] = docchecksum
|
|
2514
|
+
} else if let docchecksum = shareScanningListing["docCheckSum"] as? String {
|
|
2515
|
+
mrzData["Document check No."] = docchecksum
|
|
2516
|
+
}
|
|
2517
|
+
|
|
2518
|
+
if let correctdocchecksum = shareScanningListing["correctdocchecksum"] as? String {
|
|
2519
|
+
mrzData["Correct Document check No."] = correctdocchecksum
|
|
2520
|
+
|
|
2521
|
+
} else if let correctdocchecksum = shareScanningListing["correctPassportChecksum"] as? String {
|
|
2522
|
+
mrzData["Correct Document check No."] = correctdocchecksum
|
|
2523
|
+
|
|
2524
|
+
}
|
|
2525
|
+
if let contri = shareScanningListing["country"] as? String {
|
|
2526
|
+
mrzData["Country"] = contri
|
|
2527
|
+
|
|
2528
|
+
}
|
|
2529
|
+
if let nationality = shareScanningListing["nationality"] as? String {
|
|
2530
|
+
mrzData["Nationality"] = nationality
|
|
2531
|
+
|
|
2532
|
+
}
|
|
2533
|
+
if let birth = shareScanningListing["birth"] as? String {
|
|
2534
|
+
mrzData["Date of Birth"] = date(toFormatedDate: birth)
|
|
2535
|
+
|
|
2536
|
+
}
|
|
2537
|
+
if let birthchecksum = shareScanningListing["birthchecksum"] as? String {
|
|
2538
|
+
mrzData["Birth Check No."] = birthchecksum
|
|
2539
|
+
|
|
2540
|
+
} else if let birthchecksum = shareScanningListing["BirthChecksum"] as? String {
|
|
2541
|
+
mrzData["Birth Check No."] = birthchecksum
|
|
2542
|
+
|
|
2543
|
+
}
|
|
2544
|
+
if let correctbirthchecksum = shareScanningListing["correctbirthchecksum"] as? String {
|
|
2545
|
+
mrzData["Correct Birth Check No."] = correctbirthchecksum
|
|
2546
|
+
|
|
2547
|
+
} else if let correctbirthchecksum = shareScanningListing["correctBirthChecksum"] as? String {
|
|
2548
|
+
mrzData["Correct Birth Check No."] = correctbirthchecksum
|
|
2549
|
+
|
|
2550
|
+
}
|
|
2551
|
+
if let expirationdate = shareScanningListing["expirationdate"] as? String {
|
|
2552
|
+
mrzData["Date of Expiry"] = date(toFormatedDate: expirationdate)
|
|
2553
|
+
|
|
2554
|
+
} else if let expirationdate = shareScanningListing["expirationDate"] as? String {
|
|
2555
|
+
mrzData["Date of Expiry"] = date(toFormatedDate: expirationdate)
|
|
2556
|
+
|
|
2557
|
+
}
|
|
2558
|
+
if let expirationchecksum = shareScanningListing["expirationchecksum"] as? String {
|
|
2559
|
+
mrzData["Expiration Check No."] = expirationchecksum
|
|
2560
|
+
|
|
2561
|
+
} else if let expirationchecksum = shareScanningListing["expirationChecksum"] as? String {
|
|
2562
|
+
mrzData["Expiration Check No."] = expirationchecksum
|
|
2563
|
+
|
|
2564
|
+
}
|
|
2565
|
+
if let correctexpirationchecksum = shareScanningListing["correctexpirationchecksum"] as? String {
|
|
2566
|
+
mrzData["Correct Expiration Check No."] = correctexpirationchecksum
|
|
2567
|
+
|
|
2568
|
+
} else if let correctexpirationchecksum = shareScanningListing["correctExpirationChecksum"] as? String {
|
|
2569
|
+
mrzData["Correct Expiration Check No."] = correctexpirationchecksum
|
|
2570
|
+
|
|
2571
|
+
}
|
|
2572
|
+
if let issuedate = shareScanningListing["issuedate"] as? String {
|
|
2573
|
+
mrzData["Date Of Issue"] = date(toFormatedDate: issuedate)
|
|
2574
|
+
|
|
2575
|
+
} else if let issuedate = shareScanningListing["issueDate"] as? String {
|
|
2576
|
+
mrzData["Date Of Issue"] = date(toFormatedDate: issuedate)
|
|
2577
|
+
|
|
2578
|
+
}
|
|
2579
|
+
if let departmentnumber = shareScanningListing["departmentnumber"] as? String {
|
|
2580
|
+
mrzData["Department No."] = departmentnumber
|
|
2581
|
+
|
|
2582
|
+
}else if let departmentnumber = shareScanningListing["departmentNumber"] as? String {
|
|
2583
|
+
mrzData["Department No."] = departmentnumber
|
|
2584
|
+
|
|
2585
|
+
}
|
|
2586
|
+
if let otherid = shareScanningListing["otherid"] as? String {
|
|
2587
|
+
mrzData["Other ID"] = otherid
|
|
2588
|
+
|
|
2589
|
+
} else if let otherid = shareScanningListing["personalNumber"] as? String {
|
|
2590
|
+
mrzData["Other ID"] = otherid
|
|
2591
|
+
|
|
2592
|
+
}
|
|
2593
|
+
if let otherid = shareScanningListing["otherid"] as? String {
|
|
2594
|
+
mrzData["Other ID2"] = otherid
|
|
2595
|
+
|
|
2596
|
+
} else if let otherid = shareScanningListing["personalNumber2"] as? String {
|
|
2597
|
+
if otherid != "" {
|
|
2598
|
+
mrzData["Other ID2"] = otherid
|
|
2599
|
+
}
|
|
2600
|
+
}
|
|
2601
|
+
|
|
2602
|
+
|
|
2603
|
+
if let otheridchecksum = shareScanningListing["personalNumberChecksum"] as? String {
|
|
2604
|
+
mrzData["Other ID Check"] = otheridchecksum
|
|
2605
|
+
|
|
2606
|
+
} else if let otheridchecksum = shareScanningListing["otherIdChecksum"] as? String {
|
|
2607
|
+
mrzData["Other ID Check"] = otheridchecksum
|
|
2608
|
+
|
|
2609
|
+
}
|
|
2610
|
+
if let secondrowchecksum = shareScanningListing["secondrowchecksum"] as? String {
|
|
2611
|
+
mrzData["Second Row Check No."] = secondrowchecksum
|
|
2612
|
+
|
|
2613
|
+
} else if let secondrowchecksum = shareScanningListing["secondRowChecksum"] as? String {
|
|
2614
|
+
mrzData["Second Row Check No."] = secondrowchecksum
|
|
2615
|
+
|
|
2616
|
+
}
|
|
2617
|
+
if let correctsecondrowchecksum = shareScanningListing["correctsecondrowchecksum"] as? String {
|
|
2618
|
+
mrzData["Correct Second Row Check No."] = correctsecondrowchecksum
|
|
2619
|
+
|
|
2620
|
+
} else if let correctsecondrowchecksum = shareScanningListing["correctSecondrowChecksum"] as? String {
|
|
2621
|
+
mrzData["Correct Second Row Check No."] = correctsecondrowchecksum
|
|
2622
|
+
|
|
2623
|
+
}
|
|
2624
|
+
mrzData["sex"] = ""
|
|
2625
|
+
if let sx = shareScanningListing["sex"] as? String {
|
|
2626
|
+
if sx == "F" {
|
|
2627
|
+
mrzData["sex"] = "FEMALE"
|
|
2628
|
+
} else if sx == "M" {
|
|
2629
|
+
mrzData["sex"] = "MALE"
|
|
2630
|
+
} else if sx == "X"{
|
|
2631
|
+
mrzData["sex"] = "OTHER"
|
|
2632
|
+
}else{
|
|
2633
|
+
mrzData["sex"] = sx
|
|
2634
|
+
}
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2637
|
+
return mrzData
|
|
2638
|
+
}
|
|
2639
|
+
|
|
2640
|
+
func date(toFormatedDate dateStr: String?) -> String? {
|
|
2641
|
+
let dateFormatter = DateFormatter()
|
|
2642
|
+
dateFormatter.dateFormat = "yyMMdd"
|
|
2643
|
+
let date: Date? = dateFormatter.date(from: dateStr ?? "")
|
|
2644
|
+
dateFormatter.dateFormat = "dd-MM-yy"
|
|
2645
|
+
if let date = date {
|
|
2646
|
+
return dateFormatter.string(from: date)
|
|
2647
|
+
}
|
|
2648
|
+
return nil
|
|
2649
|
+
}
|
|
2650
|
+
|
|
2651
|
+
func date(to dateStr: String?) -> String? {
|
|
2652
|
+
// Convert string to date object
|
|
2653
|
+
let dateFormat = DateFormatter()
|
|
2654
|
+
dateFormat.dateFormat = "yyMMdd"
|
|
2655
|
+
let date: Date? = dateFormat.date(from: dateStr ?? "")
|
|
2656
|
+
dateFormat.dateFormat = "yy-MM-dd"
|
|
2657
|
+
if let date = date {
|
|
2658
|
+
return dateFormat.string(from: date)
|
|
2659
|
+
}
|
|
2660
|
+
return nil
|
|
2661
|
+
}
|
|
2662
|
+
}
|
|
2663
|
+
|
|
2664
|
+
extension UIColor {
|
|
2665
|
+
convenience init(hexString: String) {
|
|
2666
|
+
let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
|
|
2667
|
+
var int = UInt64()
|
|
2668
|
+
Scanner(string: hex).scanHexInt64(&int)
|
|
2669
|
+
let a, r, g, b: UInt64
|
|
2670
|
+
switch hex.count {
|
|
2671
|
+
case 3: // RGB (12-bit)
|
|
2672
|
+
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
|
|
2673
|
+
case 6: // RGB (24-bit)
|
|
2674
|
+
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
|
|
2675
|
+
case 8: // ARGB (32-bit)
|
|
2676
|
+
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
|
|
2677
|
+
default:
|
|
2678
|
+
(a, r, g, b) = (255, 0, 0, 0)
|
|
2679
|
+
}
|
|
2680
|
+
self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
|
|
2681
|
+
}
|
|
2682
|
+
|
|
2683
|
+
//MARK:- Custom
|
|
2684
|
+
|
|
2685
|
+
}
|
|
2686
|
+
|