Skip to content Skip to sidebar Skip to footer

Python Reading Wiegand Dropping Zeros

Here's the code snippet from my RFID wiegand reader on my Raspberry Pi I use already. def main(): set_procname('Wiegand Reader') global bits global timeout GPIO.add

Solution 1:

Python will remove the front few bits if they are zero, this also applies to integers. For example

>>> a = 0003
>>> a
3
>>> b = 0b0011
>>> bin(b)
0b11

From what I see, all RFID's will have 10 numbers. You can make a simple program to add those numbers in and store the value as a string:

def rfid_formatter(value):
    str_value = str(value)
    for s in range(10 - len(str_value)):
        str_value = "0" + str_value
    return str_value

Your test cases:

print rfid_formatter(120368)
print "0000120368"
print rfid_formatter(4876298)
print "0004876298"

Solution 2:

As mentioned already, leading zeros are removed in binary sequences and also when you explicitly convert a string to decimal using int().

What hasn't been mentioned already is that, in Python 2.x, integers with leading zeros are treated as octal values.

>>> a = 0003
>>> a
3
>>> a = 000127
>>> a
87

Since this was causing confusion, the implicit octal conversion was removed in Python 3 and any number of leading zeros in numerical values will raise a SyntaxError.

>>> a = 000127
  File "<stdin>", line 1
    a = 000127
             ^
SyntaxError: invalid token
>>> 

You can read the rationale behind these decisions in PEP 3127.

Anyway, I mention all of this simply to arrive at an assumption: you're probably not working with octal representations. Instead, I think you're converting result to a string in checkAccess so you can do a string comparison. If this assumption is correct, you can simply use the string method zfill (zero fill):

>>> str(119994).zfill(10)
'0000119994'
>>> 
>>> str(4876298).zfill(10)
'0004876298'
>>> 

Post a Comment for "Python Reading Wiegand Dropping Zeros"