iOS7 barcode scanner API adds a Zero to UPCA barcode format
In case anyone interested in for the swift version.
Swift 3.1:
guard let barcodeReadable = barcodeData as? AVMetadataMachineReadableCodeObject else {
return
}
guard var barcode = barcodeReadable.stringValue else {
return
}
if barcodeReadable.type == AVMetadataObjectTypeEAN13Code && barcode.hasPrefix("0"){
let index = barcode.index(barcode.startIndex, offsetBy: 1)
barcode = barcode.substring(from: index)
}
I found the problem. Apple just convert every UPC-A barcode to EAN13 just by adding a leading zero.
The solution is to verify if the barcode is EAN13 and if the string result have a leading zero is safe to remove it and obtain a UPC-A barcode.
if(detectionString!=nil){
if([metadata.type isEqualToString:AVMetadataObjectTypeEAN13Code]){
if ([detectionString hasPrefix:@"0"] && [detectionString length] > 1)
detectionString = [detectionString substringFromIndex:1];
}
}
Link to Apple technical note: https://developer.apple.com/library/content/technotes/tn2325/_index.html#//apple_ref/doc/uid/DTS40013824-CH1-IS_UPC_A_SUPPORTED_
More information in: http://www-01.ibm.com/support/docview.wss?uid=pos1R1002813
According to the Uniform Code Council, an EAN-13 barcode that begins with a zero is, by definition, a 12-digit UPC-A barcode. To follow this rule, when a scanner device reads an EAN-13 barcode beginning with a zero, it drops the leading 0, truncates the barcode to 12 digits and appends the UPC-A (instead of EAN-13) indicator to the label, before passing the label to the Operating System. Therefore, the Operating System has no way to recognize that this UPC-A label that was passed to it by the scanner device was initially an EAN-13 label beginning with a zero.