Or just use von Neumann's debiasing algorithm - toss twice, and see if it's head-tail or tail-head, retoss when you get repeated heads or tails. It doesn't prevent dishonest tosses (if you can manipulate the bias in each toss), but should work to eliminate a consistent dynamic bias by an honest tosser.