+1  A: 

Short of changing your model to not use a different ID for zip codes...

Create a hidden field for the zipcode id. Change the select behaviour to populate the hidden field with the ID and the visible one with the label.

See The sample for how to achieve this

Have you considered what happens if they type their own in?

Luke Schafer