AIAG 2D Bar-codes

Anyone with experience parsing AIAG 2D Bar-codes with Python? Bar-code reader returns the string “[)>06P145013010Q60S000580431VELI003GT”, where ‘P’, ‘Q’, ‘S’,‘V’ are Field Identifers, not delimiters.

If they are always the same length you could just parse them out like

bc = "[)>06P145013010Q60S000580431VELI003GT"
p = bc[6:15]
q = bc[16:18]
s = bc[19:28]
v = bc[29:37]
print p,q,s,v

If not you will have to get a bit fancier.

Thanks but unfortunately they are not the same length. i.e.
[)>06P145013010Q60S000580431VELI003GT
[)>06P145013010Q1440M000588478VELI003GT

and each of these fields could change length
I’ll keep trying

According to the standards your scanner is supposed to embed codes inside the string that shows where the fields start and end. There should be a code FNC1 at the end of each fields values.

If your scanner is configurable for what it does at the end of each field, you could always have it put either a comma or a space at the end and then just split the returned string on that delimiter.

bc = "[)>06,P145013010,Q60,S000580431,VELI003GT"
ds = bc.split(",")

print ds[1][1:] #P
print ds[2][1:] #Q
print ds[3][1:] #S
print ds[4][1:] #V

1 Like

You could work with python regular expressions: https://docs.python.org/2/library/re.html

import re

regex = re.compile("P([0-9]*)Q([0-9]*)S([0-9]*)VELI([0-9]*)GT")
regexResult = regex.search(barcodeString)

if regexResult == None:
    print "no valid barcode"
else:
    print regexResult.group(0) # the entire regex match
    print regexResult.group(1) # P
    print regexResult.group(2) # Q
    print regexResult.group(3) # S
    print regexResult.group(4) # VELI

Some information on regexes:

Regular expressions loop over the characters in a string, and check if they match. F.e. P will match when the character P is encountered. But you can also give a set of characters to the regex. [0-9] will match any number.

Then there’s also repetition. The * means it has to match the previous group 0 or more times. If you’d use a +, it would have to match 1 or more times.

So the regex matches a P, followed by any numbers, followed by a Q, …

When you use parenthesis, it groups characters. F.e. (abc)+ would match abc or abcabc etc. but not aabbcc, the order is fixed in that group (unlike in a set in square brackets).

Then when you execute the regex, it will also return the groups to you. That’s why I put those number sets in parentheses, so it will extract those numbers.

1 Like

@mwaynesmith We use these formats extensively. I’ll post our parsing library later today.

1 Like