Zip codes as you probably know do not have a single point, they are not even true polygons but rather comprised of collection of streets. So when geocoding zip codes (or cities) the centroid point is usually calculated based on specific algorithm, Google for polygon centroid for more info.
As far as geocoding services go there are couple web services that do zip code or city geo coding, this one http://codebump.com/subscriptions/ for example or search xmethods.com for "zip code service".