在常見的條形碼中,UPC-A碼長度是12位的,EAN13碼長度是13位的,蘋果將UPC-A條碼和EAN13條碼放到了一起不做區(qū)分!UPC-A條碼實際上是EAN-13條碼的子集。如果一個EAN-13條碼的第一位數(shù)字是0,那么這個條碼既是EAN-13碼也同樣是是UPC-A碼(去掉開頭的0)。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比二連浩特網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式二連浩特網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋二連浩特地區(qū)。費用合理售后完善,十年實體公司更值得信賴。
解決方法:以0開頭的EAN13碼實際上就是UPC-A碼在前面補了一個0,在AVFoundation掃描得到的結(jié)果里只需要判斷條碼的類別是否AVMetadataObjectTypeEAN13Code并且是否以0開頭,如果是的話就把第一位的0直接刪掉就好啦~
打開微信掃一掃
現(xiàn)在手機很多軟件都有掃描條形碼功能,只要打開功能對準(zhǔn)條形碼掃描即可。首先打開手機中的微信,點擊發(fā)現(xiàn)。點擊掃一掃,會出現(xiàn)一個小框,將框?qū)?zhǔn)條形碼,開始掃描。
很快手機就會獲取這個條形碼的信息,這樣條形碼的信息就顯示在手機屏幕上了。條形碼(barcode)是將寬度不等的多個黑條和空白,按照一定的編碼規(guī)則排列,用以表達一組信息的圖形標(biāo)識符。
常見的條形碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱空)排成的平行線圖案。條形碼可以標(biāo)出物品的生產(chǎn)國、制造廠家、商品名稱、生產(chǎn)日期、圖書分類號、郵件起止地點、類別、日期等許多信息,因而在商品流通、圖書管理、郵政管理、銀行系統(tǒng)等許多領(lǐng)域都得到廣泛的應(yīng)用。
ZBar也是一個常用的二維碼識別,并分別提供了iOS和Android的SDK可供使用,最終我選擇了ZBar進行二維碼識別,它的注釋清晰,便于使用。 ZBar為我們提供了兩種使用方式,一種是直接調(diào)用ZBar提供的ZBarReaderViewController打開一個掃描界面
官方提供的接口非常簡單,代碼如下:
@interface ViewController ()AVCaptureMetadataOutputObjectsDelegate//用于處理采集信息的代理
{
AVCaptureSession * session;//輸入輸出的中間橋梁
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//獲取攝像設(shè)備
AVCaptureDevice * device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
//創(chuàng)建輸入流
AVCaptureDeviceInput * input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
//創(chuàng)建輸出流
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];
//設(shè)置代理 在主線程里刷新
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];
//初始化鏈接對象
session = [[AVCaptureSession alloc]init];
//高質(zhì)量采集率
[session setSessionPreset:AVCaptureSessionPresetHigh];
[session addInput:input];
[session addOutput:output];
//設(shè)置掃碼支持的編碼格式(如下設(shè)置條形碼和二維碼兼容)
output.metadataObjectTypes=@[AVMetadataObjectTypeQRCode,AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
AVCaptureVideoPreviewLayer * layer = [AVCaptureVideoPreviewLayer layerWithSession:session];
layer.videoGravity=AVLayerVideoGravityResizeAspectFill;
layer.frame=self.view.layer.bounds;
[self.view.layer insertSublayer:layer atIndex:0];
//開始捕獲
[session startRunning];
}
之后我們的UI上已經(jīng)可以看到攝像頭捕獲的內(nèi)容,只要實現(xiàn)代理中的方法,就可以完成二維碼條形碼的掃描:
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
if (metadataObjects.count0) {
//[session stopRunning];
AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
//輸出掃描字符串
NSLog(@"%@",metadataObject.stringValue);
}
}
是可以的,不過你需要借助軟件,有的條碼是需要軟件才能讀取到條碼的數(shù)據(jù)的。
1、下載第三方軟件,如微信、QQ、快拍二維碼等。
2、打開網(wǎng)絡(luò)連接。
3、打開軟件,將攝像頭對準(zhǔn)你要掃描的條形碼和二維碼即可。
條形碼(barcode)是將寬度不等的多個黑條和空白,按照一定的編碼規(guī)則排列,用以表達一組信息的圖形標(biāo)識符。常見的條形碼是由反射率相差很大的黑條(簡稱條)和白條(簡稱空)排成的平行線圖案。條形碼可以標(biāo)出物品的生產(chǎn)國、制造廠家、商品名稱、生產(chǎn)日期、圖書分類號、郵件起止地點、類別、日期等許多信息,因而在商品流通、圖書管理、郵政管理、銀行系統(tǒng)等許多領(lǐng)域都得到廣泛的應(yīng)用。
二維條碼/二維碼(2-dimensional
bar
code)是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的;在代碼編制上巧妙地利用構(gòu)成計算機內(nèi)部邏輯基礎(chǔ)的“0”、“1”比特流的概念,使用若干個與二進制相對應(yīng)的幾何形體來表示文字?jǐn)?shù)值信息,通過圖象輸入設(shè)備或光電掃描設(shè)備自動識讀以實現(xiàn)信息自動處理:它具有條碼技術(shù)的一些共性:每種碼制有其特定的字符集;每個字符占有一定的寬度;具有一定的校驗功能等。同時還具有對不同行的信息自動識別功能、及處理圖形旋轉(zhuǎn)變化點。