We use a simple, single text field with an example instruction, just like Bennett suggests.
Date of birth |________| (example: 31/5/1970)
However, we also add another element onto the page, which we call a Field Reflection pattern. The form takes whatever they entered into the field, and will then dynamically parseparses and interpretinterprets it, and reflectreflects the information back in a slightly different form. For dates, this means taking "31/5/70" and displaying "Sunday, 31st May, 1970".
Calculating the day of week is a small delighter we add in there just for fun. We have found that putting the day of week did result in more people paying attention to the display, and thus catching any errors more often.