1. You can use geo-IP database for this, you can find many of them online, some are free, some are commercial. But this is very unreliable, especially if user is on a mobile network.
2. You'll need geo-coordinates of restaurants or a way to get coordinates from zip code.
3. There are few methods to do this:http://en.wikipedia.org/wiki/Geographical_distance