iOS扫描12位数条形码却拿到了个13位的条形码怎么办?

在工作中遇到了这个一个问题,我们的APP中有扫描条形码的功能,但是最近由用户反应扫描条形码查询不到信息,到数据库中查了发现用户上传的条形码是以0开头的13位条形码。

upc-a

随后根据用户的描述,在某东上找到了该商品的条形码(上图),发现该条形码只有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

<

stackoverflow%e6%88%aa%e5%9b%be

浏览了各类文章之后确定了一件事:以0开头的EAN13码实际上就是UPC-A码在前面补了一个0,在AVFoundation扫描得到的结果里只需要判断条码的类别是否AVMetadataObjectTypeEAN13Code并且是否以0开头,如果是的话就把第一位的0直接删掉就好啦~

简单扩展

UPC-A为早期使用的条形码(出现于1973年),EAN13是后来为了能够更广泛地使用条形码而发明的,兼容UPC-A。EAN13是UPC-A的超集(即EAN13包含UPC-A)。

评论

  1. 7年前
    2016-11-24 10:57:16

    :rolleyes: :rolleyes: :rolleyes:
    10Views One Comment.
    表白博主。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇