最近项目要用到一个功能:通过扫描银行卡,获取银行卡号,在网上搜过后,选用了card.io这个SDK,过程如下:
(1)下载Card.io
Card.io是让手机摄像头获取信用卡的信息,中间利用了OCR(光学字符识别)的扫描技术返回结果,它还推出了SDK(软件开发包),让开发者们可以把card.io添加到自己的应用当中。可以在https://github.com/paypal/PayPal-iOS-SDK下载最新的SDK或者直接下载我的下载好的:http://download.csdn.net/detail/u012890196/8658627
(2)添加到项目里
1、将下载的SDK包里名为CardIO的文件拖到工程里,在TARGETS-Build Phases - Link Binary With Librarys添加下面依赖库
* AudioToolbox
* AVFoundation
* CoreGraphics
* CoreMedia
* CoreVideo
* Foundation
* MobileCoreServices
* OpenGLES
* QuartzCore
* Security
* UIKit
如果是xcode5或者更新的版本,只需要添加下面的库
* AVFoundation
* AudioToolbox
* CoreMedia
* MobileCoreServices
并且保证Build Settings里面这两项都是YES:
* Enable Modules (C and Objective-C)
*Link Frameworks Automatically
2、在TARGETS-Build Settings添加 -lc++到Other Linker Flags
(3)使用
我是把它作为一个viewController类使用
代码:
导入
#import "CardIO.h"
#import "CardIOPaymentViewControllerDelegate.h"
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[CardIOUtilities preload];
}
//开始扫描
- (IBAction)scanCard:(id)sender
{
CardIOPaymentViewController *scanViewController = [[CardIOPaymentViewController alloc] initWithPaymentDelegate:self];
[self presentViewController:scanViewController animated:YES completion:nil];
}
下面是代理方法
//取消扫描
- (void)userDidCancelPaymentViewController:(CardIOPaymentViewController *)scanViewController
{
NSLog(@"User canceled payment info");
// Handle user cancellation here...
[scanViewController dismissViewControllerAnimated:YES completion:nil];
}
//扫描完成
-(void)userDidProvideCreditCardInfo:(CardIOCreditCardInfo *)info inPaymentViewController:(CardIOPaymentViewController *)scanViewController
{
//扫描结果
//CardIOCreditCardInfo *info里面包含了银行卡的一些信息,如info.cardNumber是扫描的银行卡号,现实的是完整号码,而info.redactedCardNumber只显示银行卡后四位,前面的用*代替了,返回的银行卡号都没有空格
可以用下面注释的方法来加空格
// NSString *strTem = [info.cardNumber stringByReplacingOccurrencesOfString:@" " withString:@""];
// NSString *strTem2 = @"";
// if (strTem.length % 4 == 0)
// {
// int count = strTem.length / 4;
// for (int i = 0; i < count; i++)
// {
// NSString *str = [strTem substringWithRange:NSMakeRange(i * 4, 4)];
// strTem2 = [strTem2 stringByAppendingString:[NSString stringWithFormat:@"%@ ", str]];
// }
// }
// else
// {
// int count = strTem.length / 4;
// for (int j = 0; j <= count; j++)
// {
// if (j == count)
// {
// NSString *str = [strTem substringWithRange:NSMakeRange(j * 4, strTem.length % 4)];
// strTem2 = [strTem2 stringByAppendingString:[NSString stringWithFormat:@"%@ ", str]];
// }
// else
// {
// NSString *str = [strTem substringWithRange:NSMakeRange(j * 4, 4)];
// strTem2 = [strTem2 stringByAppendingString:[NSString stringWithFormat:@"%@ ", str]];
// }
// }
// }
NSLog(@"Received card info. Number: %@, expiry: %02i/%i, cvv: %@.", info.redactedCardNumber, info.expiryMonth, info.expiryYear, info.cvv);
// Use the card info...
[scanViewController dismissViewControllerAnimated:YES completion:nil];
}