職業プログラマの休日出勤

職業プログラマによる日曜自宅プログラミングや思考実験の成果たち。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。

住所の世界のレア漢字

電車の中で、就活生や転職希望者の履歴書を広げて眺めているおっさん。
数年前あたりから見る機会がすっかり減りましたが、昔はよく見かけたものです。
(もちろん重要な機密情報の積極的な漏洩にあたりますから、大半の事業所においては、そんなおっさんには懲戒解雇処分を下した上で、損害賠償請求を起こさなければなりません。)

そんなおっさんを目の当たりにしたとき、こちらが意図せずとも履歴書に書かれた住所がチラッと見えてしまうこと、ありましたよね? よく見知った地域の住所であればすぐに認識できるものですけれども、1〜2文字だけしか読めなかった、ということがあったものです。

仮に、貴方の目の前のおっさんが広げている履歴書の住所欄に「昴」(すばる)の文字が見えたとしましょう。日本の住所の中に「昴」の文字が含まれるものは、いくつあるでしょうか?

答えは一つ、青森県 弘前市 昴 です。

マンション名で使われている事例を除けば、住所はここまで特定できてしまうのです。自分の住所が1文字だけ(+それが住所の中の一文字であるという情報)が漏洩したとき、それだけでどこまで住所が特定されうるのか、気になりませんか? 私は気になります。ちょっと調べてみましょう。


日本の住所一覧

まず、このような調査をするときは、日本の住所の一覧があると便利ですね。
そう、こんなときの我々の味方「KEN_ALL.CSV」があるではありませんか!
ぜひ使わせて頂きましょう。

KEN_ALL.CSV

読み仮名データの促音・拗音を小書きで表記するもの - zip圧縮形式 日本郵便 から「全国版」をダウンロードしたもの、です。
ライセンス的なものも同じページに掲載されていますので、利用する際は、こちらご確認下さい。

出でよ、レア漢字!

こんなシェル芸を流すと、日本全国の住所でも1回しか使用されていない文字を知ることができます。

cat KEN_ALL.CSV | \
iconv -f SJIS -t UTF8 | \
grep -v '以下に掲載がない場合' | \
awk -F ',' '{print $8 $9}' | tr -d '"' | \
awk -F ',' '{for(i=1;i<length($1);i+=3)print substr($1,i,3)}' | \
sort -d | uniq -c | \
grep ' 1 ' | sed 's/.* //' | \
xargs | tr -d ' ' | fold -w 72

出力結果は、こうです。

〔〕っぷへぽゃェピヰヴ乞乢亟享亭伐伶伸伺侈便係俎俗候假催傳儘優冑凍凧刃刷
剃剪劫勲勺卑卓卦叉収叔史叺后呪哉啼嗽國坏坑垰垳埓埖堕堪塒塞墹墾壗奇奏奨奮
委娚完宏寂實審尽尿岨岻岼峇峩崇崗嶬已幼庁庇庖廊廼弄弩彰徐徴必忰恐悟情惟感
慥應戈扣扱承抓披抽担拳捲捻授掉掎接掻換搗摘撞撰擬擶故效救敲昔昧昴晃晦晶暘
曰曼朋朧朶杙杼枅枠柤柧栫栴核桙桷桾梹梺棡棯椅椌椒椡椣椴楜楪楳榔榧榿槁槐樛
樮橇橦橲檪欲歎殊毎沃沈沸泡泪淞渦渭湛湿滅滕滞滴澳濡濤災炬烈烟焔煎熨爼特犢
狂猛猩猯猴猷獄玻珀珍珸琳瑁瑤甕甜甥甸畉畜畭異瘻療皀皮盃盾眞眠睡矼砿硴碆碩
磑礬祷禎禮禽禿秬稱稼稽穏窄窕窟竃笂笄笋筌筍箆箒箟篶籔粗粭糒糖糘糯絡絶綣緤
縊縞縦繩繰纒羨翌耀耻肩胄胸膚臘舂舗舮舸艀苞苺茸莅莎莢莨莪菓菫萄葱葹蒄蒋蕉
蕷薇薑薔藏蚫蛾蜑蝮融蟆術衲衾裁装裳褒覆解訶詠試議豪責貰買賞賤賽赦跿蹄載轆
轌轤辱遇酪釛釿鈑鈩鉈鉦鋏鍔鏥鐇鑪閖閨閻限陦雅雌霄靖非靭鞦鞭頤飫餘饌駈駛駝
験驫鬚鬮鮖鮠鮨鯆鰄鰈鰔鰹鱸鳧鳰鵲鵺鶇鶚鷆麁黛鼈齋

仮名も少し含まれてしまっていますが、多くは漢字です。住所の中にこれらの文字が含まれていることがバレると、町まで一意に識別されてしまいます。中には「よく使われていそう」な文字もありますね。こわいこわい…

シェル芸の解説

1文字漏洩しただけで、という恐怖を味わった後は、集計に使ったシェル芸のうち、ややこしい部分の解説をしておきましょう。

iconv -f SJIS -t UTF8
これは文字コード変換ですね。KEN_ALL.CSVSJISで配布されますので、処理し易いUTF-8に変換しましょう。
SJISのままでも良いんでしょうけどね(その場合は後続の処理がちょっと変わります)

grep -v '以下に掲載がない場合'
「以下に掲載がない場合」を集計対象から除外しています。KEN_ALL.CSV を取り扱ったことのある方であれば、この文言が何であるかわかりますよね。わからない人は、CSVをエディタで開いてみて下さい。きっとすぐにわかります。

awk -F ',' '{print $8 $9}'
CSVの8列目(市区町村名)と9列目(町域)を抽出しています。

awk -F ',' '{for(i=1;i<length($1);i+=3)print substr($1,i,3)}'
UTF-8で1文字を1行にするようにしています。3bytes固定にしてるあたりはダサダサポイントですけども、ここではこの処理で十分ですね。

sort -d | uniq -c
文字を辞書順に並べ替えてから、カウントしています。
並べ替えないとカウントはうまく動きませんよね。

とても気になる住所

上記の文字のリストの中に の文字が含まれているのが見えますでしょうか? 私にはすぐに見えました。この「鮨」の文字を使っている土地はどこかと言うと、

$ cat KEN_ALL.CSV | iconv -f SJIS -t UTF8 | grep ''
06201,"990  ","9900884","ヤマガタケン","ヤマガタシ","スシアライ","山形県","山形市","鮨洗",0,0,0,0,0,0

山形県 山形市 鮨洗(すしあらい)という町だそうです。どんな町なのか、とても興味が湧きますね!

とても気になる住所その2(追記@2018/12/19 08:38頃)
$ cat KEN_ALL.CSV | iconv -f SJIS -t UTF8 | grep ''
26110,"607  ","6078062","キョウトフ","キョウトシヤマシナク","オトワチンジチョウ","京都府","京都市山科区","音羽珍事町",0,0,0,0,0,0

「珍」という珍しい漢字を使っている町は、山科の 音羽珍事町 だけでした!町名の由来に、どのような珍事があったと言うのでしょうか。とても気になります。
(追記ここまで)

感想

何か情報漏洩の事故が起きる時というのは、全文が漏洩するとは限りません。一部分だけ漏洩することだってあるます。その代表的な例が「ショルダーハッキング」による漏洩ですね。
一部分の漏洩が発生したときにどのような被害が考えられるかについても、色々と知った上でこの世界を生きて行きたいものです。

環境情報

  • 使用した KEN_ALL.CSV
    • 読み仮名データの促音・拗音を小書きで表記するもの
    • 2018年11月30日更新版
  • シェル芸の実行環境

おすすめ書籍

シェルプログラミング実用テクニック (Software Design plus)

シェルプログラミング実用テクニック (Software Design plus)

AWK実践入門 (Software Design plus)

AWK実践入門 (Software Design plus)