日本郵便番号

北海道

因為工作的關係,要做日本郵遞區號和地址間的自動補完,還因此開始維護 japan-postal-code-oasis 這個套件,它的前身其實是另外一套叫 japan-postal-code 的,但是它很久沒更新了,所以我就簡單修改一些設計,在研究套件設計的同時就有機會比較深入了解日本的郵遞區號(郵便番号)系統,發現不少有趣的細節,這篇文章特別來紀錄一下。

首先,第一點就是,日本郵遞區號的資料是有整理好並開放下載的,而且下載路徑、檔案格式都是固定的沒什麼變動過,也因此可以找到不少使用這些資料的程式語言套件(包含下載腳本),japan-postal-code 就是透過這份資料來實作從郵遞區號抓地址資訊的功能,雖然不是很想和台灣比,但是這點台灣真的是輸很多,台灣其實到 3+2 郵遞區號都還可以在郵局網站下載的到,但是那個下載連結不是固定的,然後也看不出來是不是固定更新,所以你不會知道你下載的資料是不是最新的,至於最新的 3+3 郵遞區號,就沒有開放大眾下載,取而代之的是提供 Web Service、Windows 應用程式,如果真的要下載資料檔,要特別申請(參照:本公司3+3郵遞區號系統使用規範說明事項),另外就是台灣是一季更新一次,日本則是一個月更新一次。

其實我會注意到日本每個月都更新郵遞區號,是從另外一件事情發現的,在繼續之前,先來介紹一下日本郵遞區號內不同數字的意義,這在日本郵局網站有很詳細的說明,前三碼稱為郵便區番号,後四碼是町域番号,其中的前兩碼是大 block 番号,第三碼則是小 block 番号,基本上都是這樣規劃,理論上不會需要到每個月更新,直到有一天我發現到六本木森大樓,每一層樓都有自己的郵遞區號,例如用 Google Map 搜尋Google Japan (Roppongi Hills),然後查看地址就會發現他的郵遞區號是 106-6126,其中的後兩碼就是 26 樓的意思,然後搜尋Apple Japan合同会社,就會發現郵遞區號是 106-6140,就是 40 樓的意思。後來我才知道,這是屬於 個別番号 之中的超高層大樓番号,除了大樓之外,還有其他種個別番号,像是大型機構(醫院、電視台、公家單位等)也可以申請,而這種個別番号也就是資料內最常會變動的地方,所以他們才有這麼頻繁的資料更新。

其實我還有在一些第三方資料,看到說前三碼的郵便區番号,還可以再更細分成兩組:前兩碼是地域番号,第三碼則是地域調整番号,町域番号的最後一碼則是町域調整番号,另外就是第一版的日本郵遞區號是三碼為主,然後有部分地區有 3+2 碼的設計,網路上還找的到當時(1968、昭和43年)第一版的郵遞區號的清單

再來印在信封上的,手寫郵遞區號的格子,其實在日本郵局網站上也有仔細的定義它的尺寸,甚至連手寫的字體也有提供範例(基本上就是要你不要寫的太潦草),台灣郵局網站我找到的最接近的就是只有信封書寫範例了,其實日本的規範這麼仔細,有一個原因是為了自動化作業。

郵便番号枠

這個自動化作業,其實遠超我的預期,不只是根據郵遞區號分類而已,日本郵局其實定義了一套地址的數位化編碼系統,轉換邏輯也不困難,也就是說,日本國內的任意地址,都可以用一串數字(看情況加上英文字母)來表示,日本地址可以簡單的轉為英數編碼,有一個很大的原因是他們的地址是從大範圍(ex: X丁目X番X号)到小範圍這樣,而不像是其他地方用路加上號碼(ex: XX路X號)的方式,所以其實編碼機制也很簡單,大部分的地址,就是郵遞區號加上後面的三碼,然後再加上可能樓層、房號就可以組成,例如東京鳩居堂 銀座本店,地址是:

〒104-0061 東京都中央区銀座5丁目7−4

轉成編碼就是:

10400615-7-4

前七碼固定式郵便番号,所以不用處理分隔符號的問題。

另外日本地址有個天字第一號(我取名的),大家可以猜猜看是哪個地方的地址,沒錯,就是皇居,郵遞區號是 100-0001,地址是 1 丁目 1 番(沒有号),編碼就是:

10000011-1

而且這套編碼系統還有一組專用的 barcode 系統,可以用掃描的方式輸入,非常方便,barcode 的定義也蠻有趣的,不是用粗細,而是用長短和位置來表達不同意義,一條 bar 有四種(4-state)可能的變化(1-4),所以是 2bit,然後一個字元是三條 bar,所以是 6bit,可以有單一字元或是雙字元,理論上單字元有 64 種組合,雙字元是 12bit 共 4096 種組合,不過其實雙字元的第一個字元固定是控制碼,所以實際上變化沒這麼多,目前也只有定義英數、hyphen 和一些控制字元而已,日本郵局內部似乎還有其他用途,而不是只有標記收件人地址而已,不過細節沒有網站上沒有公開,這部份有分為局內 barcode 和 ID barcode,而自己用這組 barcode 系統標注地址的部分,則是稱為 custom barcode。

郵便番号 カスタマバーコード

至於要如何產生住址的 custom barcode 呢,日本郵局網站是有蠻詳細的說明,包括怎樣拆解地址、怎樣編碼、檢查碼怎樣算等等都有說明。而也還有提供一個 custom barcode 產生程式可以下載,抓下來解開後可以發現是網頁應用程式,上一個世代的,編碼也不是 UTF-8 的,現在還可以正常運作,其實還蠻厲害。

PS. 後來發現其實有蠻多國家的郵務系統是使用類似的 4-state barcode 的。

接下來算是不相關的資訊了,其實我在查資料時,有想研究看看郵便番號有沒有和其他標準相似或是共通的地方,首先是有注意到 ISO 3166-2 這個標準,是每個國家自己有一個子集,定義了各自國家的行政區,例如日本的是 ISO 3166-2:JP,裡面就是用 01-47 從北到南把日本的都道府縣編碼了一遍,而且直接對應到 JIS X 0401,最初是在好奇 JIS 的編碼和郵便番号前兩碼的地域番号有沒有相通,結果當然是沒有。其實我還蠻羨慕日本有 JIS 標準統整各種規範的單位,台灣也是有相關的編碼,只是就是像是 ISO 3166-2:TW Wikipedia 條目裡面列出的,就是各單位各自為政這樣。

另外一套標準(?)則是日本導航系統幾乎都會有支援的 MAPCODE,這個編碼系統就不是官方標準了,而是民間企業 日本電装 (前身是 Toyota 自動車的一個部門)開發的定位系統,是針對日本境內的,用類似 quadtree 的方式,把地圖分割成一小塊一小塊,然後每一塊下去編碼,不過和 quadtree 不一樣的是,不是統一分成四塊,而是分成三個層級,第一級是 Zone 全日本被分為 1203 個 Zone,然後每個 Zone 再細分成 30x30 個 Block,每個 Block 一樣再細分成 30x30 個 Unit,如果還要更細,還可以再細分成 Core 和 S Core,大約可以到 3 公尺的精細度,最後就是當然,這套系統的大分區也和郵遞區號完全不相通。


引號

Qutation Marks,

記錄一下搞 i18n 的一些發現,首先是引號,一般寫程式用的單雙引號'"是沒分開關的,不過這和寫作的不一樣,當初 ASCII Code 編定時也是因為資源有限所以才不分開引號還是關引號,不過現在其實這些標點符號都已經有區分的版本了,在 Mac 上也都有快速鍵輸入,像是:

  • ":opt + [
  • ":opt + shift + [
  • ':opt + ]
  • ':opt + shift + ]

一般文字我還蠻喜歡把普通的單引號雙引號都轉成這種,有個意外的好處就是放在 JSON 裡的字串內時,不需要用\跳脫,肉眼看起來和諧許多。

然後當初實做 Markdown 的 John Gruber 有個工具叫 SmartyPants 可以來處理單雙引號的轉換,這工具當年常和 Markdown 一起合作,我則是有把它 port 到 JavaScript,然後其實有些語言的引號不是這種點點得,像是大家都知道的中日文的「」,我要提的則是俄文用的是箭頭引號«»叫 Guillemet,長的和書名號很像,不過大小就有差,當然 Guillemet 也有單線條的版本‹›,輸入方法如下:

  • «:opt + \
  • »:opt + shift + \
  • :opt + shift + 3
  • :opt + shift + 4

德文又比較特別,左邊的引號是放在底部的,輸入方法為:

  • :opt + shift + w

當然這些不同語言的不同型式好像現在也沒有講究一定要用,我隨便找一些該語言的新聞網站也還是很多用普通的雙引號,而且實際上這些引號的組合很多,wikipedia 上有人整理好。

另外想特別提一下西班牙文,它的問句和驚嘆句,除了在句尾加問號和驚嘆號之外,還可以在句首加上反過來的問號和驚嘆號,一樣,現在似乎也沒一定要這樣寫了,輸入方法為:

  • ¿:opt + shift + /
  • ¡:opt + 1

最後補篇少數派的文章 别再用「六个点」当省略号了,这些标点都有更规范的输入方式


optimus

前幾天看了變形金剛的電影版,對裡面柯博文的名字總是聽不清楚,回來查一下官方網頁,才確定是optimus prime,不過我之前一直以為是convoy,因為柯博文、康保這兩個名字都是從convoy音譯過來的,所以剛剛問了一下對這系列比較清楚學長,才了解原來美國那邊不論是哪一個系列,拖車頭隊長都叫optimus convoy,而convoy則是日本那邊的叫法,日本那邊不同系列隊長名字又可能不太一樣。而看到這個名字我第一個想到的是optimus keyboard,一樣的optimus,但是字典卻找不到這個字,google define也沒有,不過後來在wikipedia找到了。

Optimus is the Latin word for best.

不過其實prime也有最好的意思,所以optimus prime就是最好的最好的~~。


天將降大任於斯人也

天將降大任於斯人也,必先苦其心志,勞其筋骨,餓其體膚,斷其網路,空乏其身,行拂亂其所為,所以動心忍性,增益其所不能






電腦繪圖期末報告

程式執行時的圖片

這學期修的一堂課是在教電腦繪圖的原理,主要是3D部分,最後要用OpenGL作一個期末報告,這就是我的作品:P。

如果有外接PS手把可以拿來操作,左邊類比控制版子,右邊類比控制視點,R1、R2控制遠近,L3可以朝前方加速。鍵盤的話只有上下左右控制版子和空白加速而已。

另外可能會需要glut32.dll,可以到Nate Robins下載完整的binary,或是直接在我這下載


月份的別稱

日本舊曆

  1. 睦月
  2. 如月
  3. 弥生
  4. 卯月
  5. 皐月
  6. 水無月
  7. 文月
  8. 葉月
  9. 長月
  10. 神無月 神有月
  11. 霜月
  12. 師走 極月

農曆

  1. 端月
  2. 花月
  3. 桐月
  4. 梅月
  5. 蒲月
  6. 荔月
  7. 瓜月
  8. 桂月
  9. 菊月
  10. 陽月
  11. 葭月
  12. 臘月

有點想把這些別稱用在我的日期顯示上,不過還沒決定用那個,對我來說是各有優缺點啦。中國的別稱還有其它很多,詳見Yahoo!奇摩知識 - 每個月份的別稱。不過太混雜了反而會不知選那個好。總之先測試日本舊曆的看看。


此類別所有文章