Back in gen 3 using a good random number generator was not possible. So they used a really shitty (but common) one. When you encounter a pokemon there are multiple random numbers that are returned from that formula. The formula is recursive meaning the result of the previous execution is used for the subsequent one.
This means if you look at the entire sequence of events and all of the random number calls, the actual attributes of the final pokemon you encounter is contrived.
What I mean by contrived is that the pokemon id, IVs, etc are very limited.
By knowing this, you can take the pokemon id, IVs, pokemon species, level, game origin and information about encounter data from that game to validate whether or not the pokemon was actually generated by a real encounter.
Fast forward to newer generations and this is not the case. Specifically because even though the algorithm is recursive, the range of possible output numbers is very very high. So if you try to do the same inference to determine if the pokemon was actually generated you will come up with most, if not all possible random number generator numbers.
I tried to keep it as non-technical as possible, but I can get into more detail if you are interested.