I've found with barcode scanners on both Mac and PC I might need a delay of some sort at the beginning of the data. Usually the easiest way is to program the scanner to append either a pause or some nonsense characters (like "~~~~~~~") just before sending the real data. Depending on the scanner, the pause is terrific if you can do it for a long enough period to keep the data from truncating, but sometimes the shortest pause available is actually too long and slows the process down noticeably. In that case, I'd use the extra characters. The script that processes the input from the scanner can easily filter out any of the characters that don't belong. You can do a test to see how many extra characters you need; 5 is generally enough because it's rare that I have more than 2-3 get truncated.
I don't know if that will help with jumbled data, though. That could be a mismatch between the barcode type (ex., Code 128) and what the scanner is set to read (ex., Code 39). Make sure those match.
Just had a similar problem with barcode scanners that worked fine on Windows with FMP11 but with FMP12 I have had to disable the script triggers because some characters were missed. On Macs it was fine.
Must be somethng to do with the way Windows refreshes (some one who knows please add the real reason here) and the 'issues' with FMP12 that have been reported here.
I now have to do all the checking (whether scanned or typed) after the event, not during.