If the aim is to prevent 16 year olds travelling at half rate, I agree that requiring 12 year olds to pay full rate would pretty much eliminate the problem. However it would be like using a sledgehammer to crack a nut, and it would unduly penalise many young people. That said, it wouldn't completely eliminate it; it is possible for some not yet 12 year olds to look older than recently turned 16 year olds (especially if you consider that girls can be taller and appear to look a lot older than boys around that age).Other countries avoid this problem by charging adult fare from the age of 12.
Of course whatever age you set, you will always get people who look older than that age being accused of having an invalid ticket, and you will always get people who look younger than that age trying to use (or even being offered) invalid tickets.
I came across two boys trying to avoid a Guard on an XC service a few weeks ago. I convinced them to get off and buy a ticket on their next train. When I looked up the fares, I did ask if they qualified for child fares, as I thought one of them looked 16-17 and the other 12-13, I thought perhaps they were brothers. But they told me they were actually both 14. But I wasn't surprised as you really can't tell.
The short answer to the original question in the thread title is very simple: you can't.