You can return the most likely state for a given zipcode with an array of ranges.
This is not a validator- not every number in a range is actually assigned as a zip code,and there may be new ranges added in the future.
function stateFromZip(z){
z= parseInt(z, 10);// removes leading '0'
if(z<1001 || z>99950) return null;
var i= 69, next, s,
zs= [
[1001, 2791, 'Massachusetts'], [2801, 2940, 'Rhode Island'], [3031, 3897, 'New Hampshire'],
[3901, 4992, 'Maine'], [5001, 5495, 'Vermont'], [5501, 5544, 'Massachusetts'],
[5601, 5907, 'Vermont'], [6001, 6389, 'Connecticut'], [6390, 6390, 'New York'],
[6401, 6928, 'Connecticut'], [7001, 8989, 'New Jersey'], [10001, 14975, 'New York'],
[15001, 19640, 'Pennsylvania'], [19701, 19980, 'Delaware'], [20001, 20039, 'Dist. of Columbia'],
[20040, 20167, 'Virginia'], [20042, 20599, 'Dist. of Columbia'], [20331, 20331, 'Maryland'],
[20335, 20797, 'Maryland'], [20799, 20799, 'Dist. of Columbia'], [20812, 21930, 'Maryland'],
[22001, 24658, 'Virginia'], [24701, 26886, 'West Virginia'], [27006, 28909, 'North Carolina'],
[29001, 29948, 'South Carolina'], [30001, 31999, 'Georgia'], [32004, 34997, 'Florida'],
[35004, 36925, 'Alabama'], [37010, 38589, 'Tennessee'], [38601, 39776, 'Mississippi'],
[39901, 39901, 'Georgia'], [40003, 42788, 'Kentucky'], [43001, 45999, 'Ohio'],
[46001, 47997, 'Indiana'], [48001, 49971, 'Michigan'], [50001, 52809, 'Iowa'],
[53001, 54990, 'Wisconsin'], [55001, 56763, 'Minnesota'], [57001, 57799, 'South Dakota'],
[58001, 58856, 'North Dakota'], [59001, 59937, 'Montana'], [60001, 62999, 'Illinois'],
[63001, 65899, 'Missouri'], [66002, 67954, 'Kansas'], [68001, 68118, 'Nebraska'],
[68119, 68120, 'Iowa'], [68122, 69367, 'Nebraska'], [70001, 71232, 'Louisiana'],
[71233, 71233, 'Mississippi'], [71234, 71497, 'Louisiana'], [73001, 73199, 'Oklahoma'],
[73301, 73301, 'Texas'], [73401, 74966, 'Oklahoma'], [75001, 75501, 'Texas'],
[75502, 75502, 'Arkansas'], [75503, 79999, 'Texas'], [80001, 81658, 'Colorado'],
[82001, 83128, 'Wyoming'], [83201, 83876, 'Idaho'], [84001, 84784, 'Utah'],
[85001, 86556, 'Arizona'], [87001, 88441, 'New Mexico'], [88510, 88589, 'Texas'],
[88901, 89883, 'Nevada'], [90001, 96162, 'California'], [96701, 96898, 'Hawaii'],
[97001, 97920, 'Oregon'], [98001, 99403, 'Washington'], [99501, 99950, 'Alaska']
];
while(i){
next= zs[--i];
if(z>next[0] && z<next[1]) return next[2];
}
return null;
}
stateFromZip('49125')
/* returned value: (String)
Michigan
*/
function getState(zipcode) {
// Returns false on invalid zip-- else returns {code:"XX" long:"XXXXXXXXX"}
// Ensure param is a string to prevent unpredictable parsing results
if (typeof zipcode !== 'string') {
console.log('Must pass the zipcode as a string. -- Otherwise leading zeros could cause your zip code to be parsed outside base 10.');
return;
}
// Ensure you don't parse codes that start with 0 as octal values
zipcode = parseInt(zipcode,10);
// Code blocks alphabetized by state
var states = [{min: 35000, max:36999, code: 'AL', long: "Alabama"},
{min: 99500, max:99999, code: 'AK', long: "Alaska"},
{min: 85000, max:86999, code: 'AZ', long: "Arizona"},
{min: 71600, max:72999, code: 'AR', long: "Arkansas"},
{min: 90000, max:96699, code: 'CA', long: "California"},
{min: 80000, max:81999, code: 'CO', long: "Colorado"},
{min: 6000, max:6999, code: 'CT', long: "Connecticut"},
{min: 19700, max:19999, code: 'DE', long: "Deleware"},
{min: 32000, max:34999, code: 'FL', long: "Florida"},
{min: 30000, max:31999, code: 'GA', long: "Georgia"},
{min: 96700, max:96999, code: 'HI', long: "Hawaii"},
{min: 83200, max:83999, code: 'ID', long: "Idaho"},
{min: 60000, max:62999, code: 'IL', long: "Illinois"},
{min: 46000, max:47999, code: 'IN', long: "Indiana"},
{min: 50000, max:52999, code: 'IA', long: "Iowa"},
{min: 66000, max:67999, code: 'KS', long: "Kansas"},
{min: 40000, max:42999, code: 'KY', long: "Kentucky"},
{min: 70000, max:71599, code: 'LA', long: "Louisiana"},
{min: 3900, max:4999, code: 'ME', long: "Maine"},
{min: 20600, max:21999, code: 'MD', long: "Maryland"},
{min: 1000, max:2799, code: 'MA', long: "Massachusetts"},
{min: 48000, max:49999, code: 'MI', long: "Michigan"},
{min: 55000, max:56999, code: 'MN', long: "Minnesota"},
{min: 38600, max:39999, code: 'MS', long: "Mississippi"},
{min: 63000, max:65999, code: 'MO', long: "Missouri"},
{min: 59000, max:59999, code: 'MT', long: "Montana"},
{min: 27000, max:28999, code: 'NC', long: "North Carolina"},
{min: 58000, max:58999, code: 'ND', long: "North Dakota"},
{min: 68000, max:69999, code: 'NE', long: "Nebraska"},
{min: 88900, max:89999, code: 'NV', long: "Nevada"},
{min: 3000, max:3899, code: 'NH', long: "New Hampshire"},
{min: 7000, max:8999, code: 'NJ', long: "New Jersey"},
{min: 87000, max:88499, code: 'NM', long: "New Mexico"},
{min: 10000, max:14999, code: 'NY', long: "New York"},
{min: 43000, max:45999, code: 'OH', long: "Ohio"},
{min: 73000, max:74999, code: 'OK', long: "Oklahoma"},
{min: 97000, max:97999, code: 'OR', long: "Oregon"},
{min: 15000, max:19699, code: 'PA', long: "Pennsylvania"},
{min: 300, max:999, code: 'PR', long: "Puerto Rico"},
{min: 2800, max:2999, code: 'RI', long: "Rhode Island"},
{min: 29000, max:29999, code: 'SC', long: "South Carolina"},
{min: 57000, max:57999, code: 'SD', long: "South Dakota"},
{min: 37000, max:38599, code: 'TN', long: "Tennessee"},
{min: 75000, max:79999, code: 'TX', long: "Texas"},
{min: 88500, max:88599, code: 'TX', long: "Texas"},
{min: 84000, max:84999, code: 'UT', long: "Utah"},
{min: 5000, max:5999, code: 'VT', long: "Vermont"},
{min: 22000, max:24699, code: 'VA', long: "Virgina"},
{min: 20000, max:20599, code: 'DC', long: "Washington DC"},
{min: 98000, max:99499, code: 'WA', long: "Washington"},
{min: 24700, max:26999, code: 'WV', long: "West Virginia"},
{min: 53000, max:54999, code: 'WI', long: "Wisconsin"},
{min: 82000, max:83199, code: 'WY', long: "Wyoming"}];
var state = states.filter(function(s){
return s.min <= zipcode && s.max >= zipcode;
});
if (state.length == 0){
return false;
} else if (state.length > 1) {
console.error("Whoops found two states");
}
return {code:state[0].code, long:state[0].long};
}