I don't need the city or address, just the state. And I don't want to make an API call if possible. The priority is a light-weight solution, ideally just Javascript.
I have a user-input zipcode
, and I want to display a paragraph of text depending on the state that the zipcode is in. I know it's much more complicated to lookup City and State, and for that an API such as the one the USPS exposes is probably best. But to just match state, perhaps on just the first three numbers, the solution (I think) should be easy and lightweight.
Javascript ideally. PHP could also work.
US zipcode data is in fact stable enough that you can do this without hitting an API or a database if only State (not the City or anything else) is needed.
Here's a lightweight JS solution that takes a zipcode (as a string), determines the proper US state, and returns the state as its two-letter postal abbreviation.
function getState(zipString) {
/* Ensure param is a string to prevent unpredictable parsing results */
if (typeof zipString !== 'string') {
console.log('Must pass the zipcode as a string.');
return;
}
/* Ensure we have exactly 5 characters to parse */
if (zipString.length !== 5) {
console.log('Must pass a 5-digit zipcode.');
return;
}
/* Ensure we don't parse strings starting with 0 as octal values */
const zipcode = parseInt(zipString, 10);
let st;
let state;
/* Code cases alphabetized by state */
if (zipcode >= 35000 && zipcode <= 36999) {
st = 'AL';
state = 'Alabama';
} else if (zipcode >= 99500 && zipcode <= 99999) {
st = 'AK';
state = 'Alaska';
} else if (zipcode >= 85000 && zipcode <= 86999) {
st = 'AZ';
state = 'Arizona';
} else if (zipcode >= 71600 && zipcode <= 72999) {
st = 'AR';
state = 'Arkansas';
} else if (zipcode >= 90000 && zipcode <= 96699) {
st = 'CA';
state = 'California';
} else if (zipcode >= 80000 && zipcode <= 81999) {
st = 'CO';
state = 'Colorado';
} else if ((zipcode >= 6000 && zipcode <= 6389) || (zipcode >= 6391 && zipcode <= 6999)) {
st = 'CT';
state = 'Connecticut';
} else if (zipcode >= 19700 && zipcode <= 19999) {
st = 'DE';
state = 'Delaware';
} else if (zipcode >= 32000 && zipcode <= 34999) {
st = 'FL';
state = 'Florida';
} else if ( (zipcode >= 30000 && zipcode <= 31999) || (zipcode >= 39800 && zipcode <= 39999) ) {
st = 'GA';
state = 'Georgia';
} else if (zipcode >= 96700 && zipcode <= 96999) {
st = 'HI';
state = 'Hawaii';
} else if (zipcode >= 83200 && zipcode <= 83999) {
st = 'ID';
state = 'Idaho';
} else if (zipcode >= 60000 && zipcode <= 62999) {
st = 'IL';
state = 'Illinois';
} else if (zipcode >= 46000 && zipcode <= 47999) {
st = 'IN';
state = 'Indiana';
} else if (zipcode >= 50000 && zipcode <= 52999) {
st = 'IA';
state = 'Iowa';
} else if (zipcode >= 66000 && zipcode <= 67999) {
st = 'KS';
state = 'Kansas';
} else if (zipcode >= 40000 && zipcode <= 42999) {
st = 'KY';
state = 'Kentucky';
} else if (zipcode >= 70000 && zipcode <= 71599) {
st = 'LA';
state = 'Louisiana';
} else if (zipcode >= 3900 && zipcode <= 4999) {
st = 'ME';
state = 'Maine';
} else if (zipcode >= 20600 && zipcode <= 21999) {
st = 'MD';
state = 'Maryland';
} else if ( (zipcode >= 1000 && zipcode <= 2799) || (zipcode == 5501) || (zipcode == 5544 ) ) {
st = 'MA';
state = 'Massachusetts';
} else if (zipcode >= 48000 && zipcode <= 49999) {
st = 'MI';
state = 'Michigan';
} else if (zipcode >= 55000 && zipcode <= 56899) {
st = 'MN';
state = 'Minnesota';
} else if (zipcode >= 38600 && zipcode <= 39999) {
st = 'MS';
state = 'Mississippi';
} else if (zipcode >= 63000 && zipcode <= 65999) {
st = 'MO';
state = 'Missouri';
} else if (zipcode >= 59000 && zipcode <= 59999) {
st = 'MT';
state = 'Montana';
} else if (zipcode >= 27000 && zipcode <= 28999) {
st = 'NC';
state = 'North Carolina';
} else if (zipcode >= 58000 && zipcode <= 58999) {
st = 'ND';
state = 'North Dakota';
} else if (zipcode >= 68000 && zipcode <= 69999) {
st = 'NE';
state = 'Nebraska';
} else if (zipcode >= 88900 && zipcode <= 89999) {
st = 'NV';
state = 'Nevada';
} else if (zipcode >= 3000 && zipcode <= 3899) {
st = 'NH';
state = 'New Hampshire';
} else if (zipcode >= 7000 && zipcode <= 8999) {
st = 'NJ';
state = 'New Jersey';
} else if (zipcode >= 87000 && zipcode <= 88499) {
st = 'NM';
state = 'New Mexico';
} else if ( (zipcode >= 10000 && zipcode <= 14999) || (zipcode == 6390) || (zipcode == 501) || (zipcode == 544) ) {
st = 'NY';
state = 'New York';
} else if (zipcode >= 43000 && zipcode <= 45999) {
st = 'OH';
state = 'Ohio';
} else if ((zipcode >= 73000 && zipcode <= 73199) || (zipcode >= 73400 && zipcode <= 74999) ) {
st = 'OK';
state = 'Oklahoma';
} else if (zipcode >= 97000 && zipcode <= 97999) {
st = 'OR';
state = 'Oregon';
} else if (zipcode >= 15000 && zipcode <= 19699) {
st = 'PA';
state = 'Pennsylvania';
} else if (zipcode >= 300 && zipcode <= 999) {
st = 'PR';
state = 'Puerto Rico';
} else if (zipcode >= 2800 && zipcode <= 2999) {
st = 'RI';
state = 'Rhode Island';
} else if (zipcode >= 29000 && zipcode <= 29999) {
st = 'SC';
state = 'South Carolina';
} else if (zipcode >= 57000 && zipcode <= 57999) {
st = 'SD';
state = 'South Dakota';
} else if (zipcode >= 37000 && zipcode <= 38599) {
st = 'TN';
state = 'Tennessee';
} else if ( (zipcode >= 75000 && zipcode <= 79999) || (zipcode >= 73301 && zipcode <= 73399) || (zipcode >= 88500 && zipcode <= 88599) ) {
st = 'TX';
state = 'Texas';
} else if (zipcode >= 84000 && zipcode <= 84999) {
st = 'UT';
state = 'Utah';
} else if (zipcode >= 5000 && zipcode <= 5999) {
st = 'VT';
state = 'Vermont';
} else if ( (zipcode >= 20100 && zipcode <= 20199) || (zipcode >= 22000 && zipcode <= 24699) || (zipcode == 20598) ) {
st = 'VA';
state = 'Virginia';
} else if ( (zipcode >= 20000 && zipcode <= 20099) || (zipcode >= 20200 && zipcode <= 20599) || (zipcode >= 56900 && zipcode <= 56999) ) {
st = 'DC';
state = 'Washington DC';
} else if (zipcode >= 98000 && zipcode <= 99499) {
st = 'WA';
state = 'Washington';
} else if (zipcode >= 24700 && zipcode <= 26999) {
st = 'WV';
state = 'West Virginia';
} else if (zipcode >= 53000 && zipcode <= 54999) {
st = 'WI';
state = 'Wisconsin';
} else if (zipcode >= 82000 && zipcode <= 83199) {
st = 'WY';
state = 'Wyoming';
} else {
st = 'none';
state = 'none';
console.log('No state found matching', zipcode);
}
return st;
}
You can return the state's full name instead of just the two-letter abbreviation by returning state
instead of st
on the last line.
Many thanks to @kevin-boucher and @abaldwin99 for help on parsing smaller New England codes and avoiding the dreaded octal evaluation bug with their answers here.
Also thanks for much of the original code goes to this useful page.
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};
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With