在工作中遇到了这个一个问题,我们的APP中有扫描条形码的功能,但是最近由用户反应扫描条形码查询不到信息,到数据库中查了发现用户上传的条形码是以0开头的13位条形码。
随后根据用户的描述,在某东上找到了该商品的条形码(上图),发现该条形码只有12位而使用我们的APP扫描得到的条形码却是0300087234016,不难看出其实前面多出了一个0。
这好办啊!删掉0就好了嘛!然而之前对条形码并不是很了解,扫描条码也只是直接调用了Apple提供的AVFoundation框架,万一真的有0开头的条形码而却粗暴地将第一位的0删掉了那岂不是又将会酿成大祸?抱着严谨的态度,我查找了不少关于AVFoundation以及条形码的资料。
从某度百科的“条形码”词条中对条形码的类别有了初步的了解,在常见的条形码中,UPC-A码长度是12位的,EAN13码长度是13位的,然后我在AVFoundation的文档中发现了这一段注释。
/*!
@constant AVMetadataObjectTypeEAN13Code
@abstract An identifier for an instance of AVMetadataMachineReadableCodeObject having a type AVMetadataObjectTypeEAN13Code.
@discussion
AVMetadataMachineReadableCodeObject objects generated from EAN-13 (**including UPC-A**) codes return this constant as their type.
*/
AVF_EXPORT NSString *const AVMetadataObjectTypeEAN13Code NS_AVAILABLE(NA, 7_0) __TVOS_PROHIBITED;
注意黑体字including UPC-A这个括号中的解释啊啊啊啊啊啊啊,苹果居然将UPC-A条码和EAN13条码放到了一起不做区分!这不是坑我嘛!万一EAN13码存在0开头的那我该怎么办?(当时的心声)
继续搜索资料发现自己逗比了,关于UPC-A与EAN13的资料
CSDN:http://blog.csdn.net/abcpanpeng/article/details/8130392
Note:实际上,一个UPC-A符号就是第一个数制位被设置为0的EAN-13符号。例如,“075678164125”是一个UPC-A码,如果使用EAN-13对它进行编码,将是“0075678164125”。可以看出来,我们只是在前面加了一个前导的“0”。在下图中,上面的那个是UPC-A符号,下面的那个是EAN-13符号,注意看它们之间的不同。
外文网站:http://internationalbarcodes.com/difference-between-ean-13-and-upc-a-barcodes/
UPC-A Barcodes are effectively a subset of EAN-13 Barcodes. If the first digit on the EAN-13 number is a ‘0’, then the bars will be of both the EAN-13 and the UPC-A (without the leading ‘0’) will be identical.
简单翻译一下:UPC-A条码实际上是EAN-13条码的子集。如果一个EAN-13条码的第一位数字是0,那么这个条码既是EAN-13码也同样是是UPC-A码(去掉开头的0)。
StackOverFlow:http://stackoverflow.com/questions/22767584/ios7-barcode-scanner-api-adds-a-zero-to-upca-barcode-format
<
浏览了各类文章之后确定了一件事:以0开头的EAN13码实际上就是UPC-A码在前面补了一个0,在AVFoundation扫描得到的结果里只需要判断条码的类别是否AVMetadataObjectTypeEAN13Code并且是否以0开头,如果是的话就把第一位的0直接删掉就好啦~
简单扩展
UPC-A为早期使用的条形码(出现于1973年),EAN13是后来为了能够更广泛地使用条形码而发明的,兼容UPC-A。EAN13是UPC-A的超集(即EAN13包含UPC-A)。
I really can't believe how great this site is. Keep up the good work. I'm going to tell all my friends about this place.
Hey, thanks for the article. Great.
10Views One Comment.
表白博主。