Plotting zip codes is tricky. Here's what the Census has to say about them:
in reply to Geo::PostalCode alternatives
The Census Bureau does not have maps or digital files showing the boundaries of U.S. Postal Service ZIP Codes. The fact that ZIP Codes aren't required to be polygons makes them difficult to map. They are networks of streets served by mail carriers or just individual post offices and are a tool for mail delivery. They also change periodically as required to meet Post Office operational needs. Various companies have created maps by interpolating boundaries between occurrences of ZIP Codes on the ground. However, this does not guarantee that the U.S. Postal Service delivery routes will follow this interpretation.
The Census uses ZCTA's, which are approximations of zip codes (from 2000). I don't know how you would find zip code longitude/latitude data outside of this, though maybe it exists somewhere. You could start with the TIGER files the Census provides and then re-label the ones that have changed in the mean-time as appropriate using the USPS .xls files they publicly release. Those are available at the url pattern http://ribbs.usps.gov/files/PBZIP/$year, where $year is 2001-2009.