2015-03-03 54 views
-2

如果可能,我不想要調用API。我有一個用戶輸入的郵政編碼,我想根據郵政編碼的狀態顯示一段文字。我知道查找城市和州是非常複雜的,因此USPS web API可能是最好的。但是爲了匹配狀態,這應該更容易和資源更少。如何獲得給定郵政編碼的州(城市和地址不需要)?

理想的Javascript。 PHP也可以工作。

+1

這些免費的之一有國家信息 - http://www.unitedstateszipcodes.org/zip-code-database/ – 2015-03-03 00:15:30

+0

你需要一個zipcode的數據庫及其各自的國家。你可以從USPS獲得一個。 – castis 2015-03-03 00:15:33

+2

此問題的副本只有一個upvoted答案,並且它是指向已刪除問題的鏈接。 – dave 2015-03-03 00:20:09

回答

1

我只需要國家而不是城市和國家,我特別要求一種方法來做到這一點,而不會觸及api或數據庫,這會增加應用程序的權重和處理時間。我正在尋找輕量級的東西。

無論如何,因爲美國郵政編碼不是一個隨機的數據庫,而是一組穩定而連續的記錄,至少在國家方面,我已經解決了我自己的問題,並發現我認爲是輕量級和優雅的解決方案(或者一個明顯的解決方案,取決於你的觀點)。

這裏是我要如何通過JavaScript在客戶端要做到這一點:

功能的getState(ZIP){VAR = thiszip拉鍊; // parseInt(zip);

if (thiszip >= 35000 && thiszip <= 36999) { 
      thisst = 'AL'; 
      thisstate = "Alabama"; 
      } 
    else if (thiszip >= 99500 && thiszip <= 99999) { 
      thisst = 'AK'; 
      thisstate = "Alaska"; 
     } 
    else if (thiszip >= 85000 && thiszip <= 86999) { 
     thisst = 'AZ'; 
     thisstate = "Arizona"; 
     } 
    else if (thiszip >= 71600 && thiszip <= 72999) { 
     thisst = 'AR'; 
     thisstate = "Arkansas"; 
     } 
    else if (thiszip >= 90000 && thiszip <= 96699) { 
     thisst = 'CA'; 
     thisstate = "California"; 
     } 
    else if (thiszip >= 80000 && thiszip <= 81999) { 
     thisst = 'CO'; 
     thisstate = "Colorado"; 
     } 
    else if (thiszip >= 06000 && thiszip <= 06999) { 
     thisst = 'CT'; 
     thisstate = "Connecticut"; 
     } 
    else if (thiszip >= 19700 && thiszip <= 19999) { 
     thisst = 'DE'; 
     thisstate = "Deleware"; 
     } 
    else if (thiszip >= 32000 && thiszip <= 34999) { 
     thisst = 'FL'; 
     thisstate = "Florida"; 
     } 
    else if (thiszip >= 30000 && thiszip <= 31999) { 
     thisst = 'GA'; 
     thisstate = "Georgia"; 
     } 
    else if (thiszip >= 96700 && thiszip <= 96999) { 
     thisst = 'HA'; 
     thisstate = "Hawaii"; 
     } 
    else if (thiszip >= 83200 && thiszip <= 83999) { 
     thisst = 'ID'; 
     thisstate = "Idaho"; 
     } 
    else if (thiszip >= 60000 && thiszip <= 62999) { 
     thisst = 'IL'; 
     thisstate = "Illinois"; 
     } 
    else if (thiszip >= 46000 && thiszip <= 47999) { 
     thisst = 'IN'; 
     thisstate = "Indiana"; 
     } 
    else if (thiszip >= 50000 && thiszip <= 52999) { 
     thisst = 'IA'; 
     thisstate = "Iowa"; 
     } 
    else if (thiszip >= 66000 && thiszip <= 67999) { 
     thisst = 'KS'; 
     thisstate = "Kansas"; 
     } 
    else if (thiszip >= 40000 && thiszip <= 42999) { 
     thisst = 'KY'; 
     thisstate = "Kentucky"; 
     } 
    else if (thiszip >= 70000 && thiszip <= 71599) { 
     thisst = 'LA'; 
     thisstate = "Louisiana"; 
     } 
    else if (thiszip >= 03900 && thiszip <= 04999) { 
     thisst = 'ME'; 
     thisstate = "Maine"; 
     } 
    else if (thiszip >= 20600 && thiszip <= 21999) { 
     thisst = 'MD'; 
     thisstate = "Maryland"; 
     } 
    else if (thiszip >= 01000 && thiszip <= 02799) { 
     thisst = 'MA'; 
     thisstate = "Massachusetts"; 
     } 
    else if (thiszip >= 48000 && thiszip <= 49999) { 
     thisst = 'MI'; 
     thisstate = "Michigan"; 
     } 
    else if (thiszip >= 55000 && thiszip <= 56999) { 
     thisst = 'MN'; 
     thisstate = "Minnesota"; 
     } 
    else if (thiszip >= 38600 && thiszip <= 39999) { 
     thisst = 'MS'; 
     thisstate = "Mississippi"; 
     } 
    else if (thiszip >= 63000 && thiszip <= 65999) { 
     thisst = 'MO'; 
     thisstate = "Missouri"; 
     } 
    else if (thiszip >= 59000 && thiszip <= 59999) { 
     thisst = 'MT'; 
     thisstate = "Montana"; 
     } 
    else if (thiszip >= 27000 && thiszip <= 28999) { 
     thisst = 'NC'; 
     thisstate = "North Carolina"; 
     } 
    else if (thiszip >= 58000 && thiszip <= 58999) { 
     thisst = 'ND'; 
     thisstate = "North Dakota"; 
     } 
    else if (thiszip >= 68000 && thiszip <= 69999) { 
     thisst = 'NE'; 
     thisstate = "Nebraska"; 
     } 
    else if (thiszip >= 88900 && thiszip <= 89999) { 
     thisst = 'NV'; 
     thisstate = "Nevada"; 
     } 
    else if (thiszip >= 03000 && thiszip <= 03899) { 
     thisst = 'NH'; 
     thisstate = "New Hampshire"; 
     } 
    else if (thiszip >= 07000 && thiszip <= 08999) { 
     thisst = 'NJ'; 
     thisstate = "New Jersey"; 
     } 
    else if (thiszip >= 87000 && thiszip <= 88499) { 
     thisst = 'NM'; 
     thisstate = "New Mexico"; 
     } 
    else if (thiszip >= 10000 && thiszip <= 14999) { 
     thisst = 'NY'; 
     thisstate = "New York"; 
     } 
    else if (thiszip >= 43000 && thiszip <= 45999) { 
     thisst = 'OH'; 
     thisstate = "Ohio"; 
     } 
    else if (thiszip >= 73000 && thiszip <= 74999) { 
     thisst = 'OK'; 
     thisstate = "Oklahoma"; 
     } 
    else if (thiszip >= 97000 && thiszip <= 97999) { 
     thisst = 'OR'; 
     thisstate = "Oregon"; 
     } 
    else if (thiszip >= 15000 && thiszip <= 19699) { 
     thisst = 'PA'; 
     thisstate = "Pennsylvania"; 
     } 
    else if (thiszip >= 00300 && thiszip <= 00999) { 
     thisst = 'PR'; 
     thisstate = "Puerto Rico"; 
     } 
    else if (thiszip >= 02800 && thiszip <= 02999) { 
     thisst = 'RI'; 
     thisstate = "Rhode Island"; 
     } 
    else if (thiszip >= 29000 && thiszip <= 29999) { 
     thisst = 'SC'; 
     thisstate = "South Carolina"; 
     } 
    else if (thiszip >= 57000 && thiszip <= 57999) { 
     thisst = 'SD'; 
     thisstate = "South Dakota"; 
     } 
    else if (thiszip >= 37000 && thiszip <= 38599) { 
     thisst = 'TN'; 
     thisstate = "Tennessee"; 
     } 
    else if ((thiszip >= 75000 && thiszip <= 79999) || (thiszip >= 88500 && thiszip <= 88599)) { 
     thisst = 'TX'; 
     thisstate = "Texas"; 
     } 
    else if (thiszip >= 84000 && thiszip <= 84999) { 
     thisst = 'UT'; 
     thisstate = "Utah"; 
     } 
    else if (thiszip >= 05000 && thiszip <= 05999) { 
     thisst = 'VT'; 
     thisstate = "Vermont"; 
     } 
    else if (thiszip >= 22000 && thiszip <= 24699) { 
     thisst = 'VA'; 
     thisstate = "Virgina"; 
     } 
    else if (thiszip >= 20000 && thiszip <= 20599) { 
     thisst = 'DC'; 
     thisstate = "Washington DC"; 
     } 
    else if (thiszip >= 98000 && thiszip <= 99499) { 
     thisst = 'WA'; 
     thisstate = "Washington"; 
     } 
    else if (thiszip >= 24700 && thiszip <= 26999) { 
     thisst = 'WV'; 
     thisstate = "West Virginia"; 
     } 
    else if (thiszip >= 53000 && thiszip <= 54999) { 
     thisst = 'WI'; 
     thisstate = "Wisconsin"; 
     } 
    else if (thiszip >= 82000 && thiszip <= 83199) { 
     thisst = 'WY'; 
     thisstate = "Wyoming"; 
     } 
    else { 
     thisst = 'none'; 
    } 
    return thisst; 
} 

這將是很容易重新設計在PHP或您最喜愛的語言杜日。

大部分代碼來自this useful page

+2

一些範圍重疊,你需要額外的範圍,以保持德克薩斯州和路易斯安那州的俄克拉荷馬州等。 – kennebec 2015-03-03 02:52:48

+0

我看不到TX,LA或OK在哪裏重疊。你能澄清嗎? – 2015-03-10 17:31:52

+0

已注意。 TX,LA和OK的範圍是固定的。 – 2015-03-31 20:26:30

0

您可以使用範圍數組返回給定郵政編碼的最可能狀態。

這不是一個驗證器 - 並不是每個範圍內的數字都被實際指定爲一個郵政編碼,並且將來可能會添加新的範圍。

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')

/*返回的值:(字符串) 密歇根 */

+0

這就是我所提出的確切問題的一個很好的解決方案。 – 2015-03-03 18:35:21

2

zippopotam.us具有REST API。 下面是如何從純JavaScript一個ZIP獲得一個狀態(無庫)爲例:

var getStatebutton = document.getElementById('GetStateButton'); 
 

 
getStatebutton.onclick = function() { 
 
    var zipCode = document.getElementById('ZIPCode'); 
 
    var zip = zipCode.value; 
 
    if (!zip) return; 
 
    var url = 'http://api.zippopotam.us/us/' + zip; 
 
    var xhr = new XMLHttpRequest(); 
 

 
    xhr.onreadystatechange = function() { 
 
     if (xhr.readyState == 4) { 
 
      var result = xhr.responseText; 
 
      var zippo = JSON.parse(result); 
 
      var resultDiv = document.getElementById('divResult'); 
 
      resultDiv.innerHTML = zippo.places[0].state; 
 
     } 
 
    }; 
 
    xhr.open('GET', url, true); 
 
    xhr.send(null); 
 
};
ZIP: 
 
<input type='text' id='ZIPCode' value='90210' /> 
 
<button id="GetStateButton">Get State</button> 
 
<p></p>State: 
 
<div id='divResult'></div>

jsfiddle如果你喜歡。

+2

好的答案,但我不希望有任何外部依賴項添加到應用程序。這是精益,但仍然取決於zippopotam.us。 – 2015-03-03 18:36:15

相關問題