I am developing software for a factory to track operators' work. The system generates coupons with a unique serial number (TaskId) for each task. Users scan a QR code or manually input the serial number (which is displayed in Base 26) into an Android app after completing a task.
To prevent exploitation where users insert neighboring IDs to access more coupons, I implemented a solution using C# Random function to append a two-character check at the end using the serial number as its seed. However, I discovered that the Random function may not generate the same number with the same seed across different .NET versions.
I am exploring alternatives to the Random function, considering CRC checks but concerned about generating neighboring values for neighboring seeds. I want a simple solution, as users may need to manually type the serial number.
What would be a better way to replace the Random function in this context, considering the simplicity of generated characters and ease of manual input?
The solution should be easy enough for computer to calculate, yet troublesome enough for mere humanbeing to guess (of course they can still brute force it, but each coupon only worth few cents).
Thanks in advance!