Here's my algorithm:
/form-show
fieldhash = hash(ymd(today))
valuehash = hash(remoteip + ymd(today))
<input type=hidden name=fieldhash value=valuehash>
<input type=text name=email value="" style=display:none>
/form-validate
field0 = hash(ymd(yesterday))
value0 = hash(remoteip + ymd(yesterday))
field1 = hash(ymd(today))
value1 = hash(reomteip + ymd(today))
if(post[email] != "")
// reject form
if(post[field0] == value0 || post[field1] == value1)
// accept form