#きっかけ
文字列をポケベルの数字列で暗号化、またポケベルの数字列から文字列に復号化する、というものが載っていたので自分で、コードを書いてみました。
Rubyで暗号化、復号化 - Qiita
「暗号化とは言えんと思うなぁ、数字のまま読める人種が居たし(解説:メッセージを表示できるポケベルが出た当初は 数字しか表示できなかった ので、脳内で復号化した)。それにしても、これをハッシュのテーブルで扱うのは上手くないような気がする…文字コードでうまく扱えないだろうか」
と思ったのがきっかけです。
しかしドツボに嵌まりました。
なぜなら……五十音順になっている文字コードは半角カナだけだったからですw
#インストール
rubugemsでインストールしてください。
$ gem install pokebell
#ソース
Github に上げてます。
riocampos/pokebell
#使い方
ひらがな、カタカナ、数字、Alphabet(大文字/小文字、全角/半角)、記号の一部をポケベルの二桁数字に変換します。濁点や半濁点も問題なく変換します(半角カナ変換時に用いたNKFライブラリのおかげです)。
pokeberu = Pokebell.new("ぽけべる")
pokeberu.pokebell #=> "650524640493"
pokeberu.code #=> "650524640493"
pokeberu.str #=> "ぽけべる"
pokeberu.to_a #=> "ぽけべる"
#変換テーブル
このテーブルを参考にしました。
あとで検索したらこういうのもありました。
なお、テーブルの右部分が違うものもありました。
DoCoMoとそれ以外(テレメッセージ系)の会社で異なったのではないかと思われますが、今回 Pokebell gem で取り上げた変換テーブルがどちらのものなのかは不明です(おそらく DoCoMo でしょうが)。
#変換テーブル部分
結局、一部はハッシュテーブルになりました、とさ。
class Pokebell
def encode(code)
code2pokebell_hash = {
166 => "02", # を
63 => "67", # ?
33 => "68", # !
45 => "69", # −
304 => "69", # ー
47 => "60", # /
92 => "76", # ¥
38 => "77", # &
40 => "82", # (
41 => "84", # )
42 => "86", # *
35 => "87", # #
32 => "88", # 全角スペース
350 => "04", # ゛
351 => "05", # ゜
}
case code
when 167..171 # ぁ-ぉ
code = code + 10
when 172..174 # ゃ-ょ
code = code + 40
when 175 # っ
code = code + 19
when 97..122 # a-z
code = code - 32
end
case code
when 177..211 # あ-も
digit(code, 177, 1, 1)
when 215..220 # ら-わ
digit(code, 215, 9, 1)
when 221..223 # ん゛゜
digit(code, 220, 0, 2)
when 212..214 # や-よ
second_digit, first_digit = (code - 212).divmod(3)
"#{(second_digit + 8) % 10}#{first_digit * 2 + 1}"
when 65..90 # A-Z
digit(code, 65, 1, 6)
when 49..57 # 1-9
digit(code, 49, 9, 6)
when 48 # 0
"00"
when *code2pokebell_hash.keys
code2pokebell_hash[code]
else
raise "out of aiming charactor area"
end
end
def digit(code, base, first_digit_base, second_digit_base)
second_digit, first_digit = (code - base).divmod(5)
"#{(second_digit + first_digit_base) % 10}#{(first_digit + second_digit_base) % 10}"
end
end
#TODO
- 絵文字対応(?, ☏, ?, ♡)
- 復号化メソッド作成
#rubygems の作り方手順
Jewelerで作ったGemをGithubとRubygemsに登録 - Qiita