Are you saying that when no card is present you get random values displayed and when a card is present you get NO values displayed?
If you can get access to an oscilloscope, check the data lines. Make sure you have a ground line connected between the reader and the Arduino.
The code has no protection against receiving more bits than the array can handle.
Perhaps the WEIGAND_WAIT_TIME is too low (ending the input prematurely) or too high (allowing for repeated messages to be merged).