Skip to content

Instantly share code, notes, and snippets.

@kennyj
Last active November 28, 2024 18:15
Show Gist options
  • Save kennyj/4966002 to your computer and use it in GitHub Desktop.
Save kennyj/4966002 to your computer and use it in GitHub Desktop.

Revisions

  1. kennyj revised this gist Feb 16, 2013. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.rb
    Original file line number Diff line number Diff line change
    @@ -214,7 +214,7 @@ module TelSplitter

    # 市外局番長毎のマップを作成する
    5.downto(2) do |i|
    const_set("MAP_#{i}", MAP.select { |e| e.length == i })
    const_set("MAP_#{i}", MAP.reject { |k, v| k.length != i })
    end

    def self.split(tel)
  2. kennyj created this gist Feb 16, 2013.
    232 changes: 232 additions & 0 deletions gistfile1.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,232 @@
    # encoding: utf-8

    module TelSplitter
    MAP = {
    # 市外局番 , 市内局番の桁数のマップ
    # http://www.soumu.go.jp/main_sosiki/joho_tsusin/top/tel_number/number_shitei.html のデータを利用
    # 固定電話以外の桁数は適当です...
    '050' => 4, # IP電話
    '070' => 4, # 携帯電話/PHS
    '080' => 4, # 携帯電話
    '090' => 4, # 携帯電話
    '020' => 3, # その他
    '0120' => 3, # その他
    '0800' => 3, # その他
    '0570' => 3, # その他
    '0990' => 3, # その他
    # 固定電話
    '011' => 3, '0123' => 2, '0123' => 2,
    '0123' => 2, '0124' => 2, '0125' => 2,
    '0126' => 2, '01267' => 1, '0133' => 2,
    '0133' => 2, '0134' => 2, '0135' => 2,
    '0135' => 2, '0136' => 2, '0136' => 2,
    '01372' => 1, '01374' => 1, '0137' => 2,
    '01377' => 1, '0137' => 2, '0138' => 2,
    '01392' => 1, '0139' => 2, '0139' => 2,
    '01397' => 1, '01398' => 1, '0142' => 2,
    '0143' => 2, '0144' => 2, '0145' => 2,
    '0145' => 2, '01456' => 1, '01457' => 1,
    '0146' => 2, '0146' => 2, '01466' => 1,
    '0152' => 2, '0152' => 2, '0152' => 2,
    '0153' => 2, '0153' => 2, '0153' => 2,
    '0153' => 2, '0154' => 2, '01547' => 1,
    '015' => 3, '0155' => 2, '015' => 3,
    '01558' => 1, '0156' => 2, '01564' => 1,
    '0156' => 2, '0157' => 2, '0158' => 2,
    '0158' => 2, '01586' => 1, '01587' => 1,
    '0158' => 2, '0162' => 2, '01632' => 1,
    '01634' => 1, '01635' => 1, '0163' => 2,
    '0163' => 2, '0164' => 2, '0164' => 2,
    '0164' => 2, '01648' => 1, '0165' => 2,
    '01654' => 1, '01655' => 1, '01656' => 1,
    '01658' => 1, '0166' => 2, '0167' => 2,
    '0172' => 2, '0173' => 2, '0173' => 2,
    '0174' => 2, '0175' => 2, '0175' => 2,
    '0176' => 2, '017' => 3, '0178' => 2,
    '0179' => 2, '0182' => 2, '0183' => 2,
    '0184' => 2, '0185' => 2, '0185' => 2,
    '0186' => 2, '0186' => 2, '0186' => 2,
    '0187' => 2, '0187' => 2, '018' => 3,
    '0191' => 2, '0192' => 2, '0193' => 2,
    '0193' => 2, '0194' => 2, '0194' => 2,
    '0195' => 2, '0195' => 2, '019' => 3,
    '0197' => 2, '0197' => 2, '0198' => 2,
    '0198' => 2, '022' => 3, '0220' => 2,
    '0223' => 2, '0224' => 2, '0224' => 2,
    '0225' => 2, '0226' => 2, '0228' => 2,
    '0229' => 2, '0233' => 2, '0234' => 2,
    '0235' => 2, '023' => 3, '0237' => 2,
    '0237' => 2, '0238' => 2, '0238' => 2,
    '0240' => 2, '0241' => 2, '0241' => 2,
    '0241' => 2, '0241' => 2, '0242' => 2,
    '0243' => 2, '0244' => 2, '024' => 3,
    '0246' => 2, '0247' => 2, '0247' => 2,
    '0248' => 2, '0248' => 2, '024' => 3,
    '025' => 3, '0250' => 2, '0254' => 2,
    '0254' => 2, '0254' => 2, '025' => 3,
    '0255' => 2, '025' => 3, '025' => 3,
    '0256' => 2, '0256' => 2, '025' => 3,
    '0257' => 2, '025' => 3, '025' => 3,
    '0258' => 2, '0259' => 2, '0260' => 2,
    '0261' => 2, '026' => 3, '0263' => 2,
    '0264' => 2, '0265' => 2, '0265' => 2,
    '0266' => 2, '0267' => 2, '0267' => 2,
    '0268' => 2, '0269' => 2, '0269' => 2,
    '0270' => 2, '027' => 3, '027' => 3,
    '0274' => 2, '0274' => 2, '0276' => 2,
    '0277' => 2, '0278' => 2, '0279' => 2,
    '0279' => 2, '0280' => 2, '0282' => 2,
    '0283' => 2, '0284' => 2, '0285' => 2,
    '0285' => 2, '028' => 3, '0287' => 2,
    '0287' => 2, '0287' => 2, '0288' => 2,
    '0289' => 2, '0291' => 2, '029' => 3,
    '0293' => 2, '0294' => 2, '0295' => 2,
    '0295' => 2, '0296' => 2, '0296' => 2,
    '0297' => 2, '0297' => 2, '029' => 3,
    '0299' => 2, '0299' => 2, '03' => 4,
    '0422' => 2, '042' => 3, '042' => 3,
    '042' => 3, '042' => 3, '042' => 3,
    '0428' => 2, '04' => 4, '042' => 3,
    '043' => 3, '0436' => 2, '0438' => 2,
    '0439' => 2, '044' => 3, '045' => 3,
    '0460' => 2, '046' => 3, '0463' => 2,
    '0465' => 2, '0466' => 2, '0467' => 2,
    '046' => 3, '0470' => 2, '0470' => 2,
    '04' => 4, '04' => 4, '047' => 3,
    '047' => 3, '0475' => 2, '0475' => 2,
    '0476' => 2, '0478' => 2, '0479' => 2,
    '0479' => 2, '048' => 3, '048' => 3,
    '0480' => 2, '048' => 3, '048' => 3,
    '049' => 3, '0493' => 2, '0494' => 2,
    '0495' => 2, '04992' => 1, '04994' => 1,
    '04996' => 1, '04998' => 1, '052' => 3,
    '053' => 3, '0531' => 2, '0532' => 2,
    '0533' => 2, '0536' => 2, '0536' => 2,
    '0537' => 2, '0538' => 2, '0539' => 2,
    '054' => 3, '0544' => 2, '0545' => 2,
    '0547' => 2, '0548' => 2, '0550' => 2,
    '0551' => 2, '055' => 3, '0553' => 2,
    '0554' => 2, '0555' => 2, '0556' => 2,
    '0556' => 2, '0557' => 2, '0558' => 2,
    '0558' => 2, '055' => 3, '0561' => 2,
    '0562' => 2, '0563' => 2, '0564' => 2,
    '0565' => 2, '0566' => 2, '0567' => 2,
    '0568' => 2, '0569' => 2, '0572' => 2,
    '0573' => 2, '0573' => 2, '0574' => 2,
    '0574' => 2, '0575' => 2, '0575' => 2,
    '0576' => 2, '05769' => 1, '0577' => 2,
    '0578' => 2, '058' => 3, '0581' => 2,
    '0584' => 2, '0585' => 2, '0586' => 2,
    '0587' => 2, '059' => 3, '059' => 3,
    '0594' => 2, '0595' => 2, '0595' => 2,
    '0596' => 2, '0597' => 2, '0597' => 2,
    '05979' => 1, '0598' => 2, '0598' => 2,
    '0599' => 2, '0599' => 2, '06' => 4,
    '072' => 3, '0721' => 2, '072' => 3,
    '072' => 3, '0725' => 2, '072' => 3,
    '072' => 3, '072' => 3, '073' => 3,
    '0735' => 2, '0735' => 2, '0736' => 2,
    '0736' => 2, '0737' => 2, '0738' => 2,
    '0739' => 2, '0740' => 2, '0742' => 2,
    '0743' => 2, '0744' => 2, '0745' => 2,
    '0745' => 2, '0746' => 2, '0746' => 2,
    '07468' => 1, '0747' => 2, '0747' => 2,
    '0748' => 2, '0748' => 2, '0749' => 2,
    '0749' => 2, '075' => 3, '0761' => 2,
    '0761' => 2, '076' => 3, '0763' => 2,
    '076' => 3, '0765' => 2, '0766' => 2,
    '0767' => 2, '0767' => 2, '0768' => 2,
    '0768' => 2, '0770' => 2, '0770' => 2,
    '0771' => 2, '0771' => 2, '0772' => 2,
    '0772' => 2, '0773' => 2, '0773' => 2,
    '0774' => 2, '077' => 3, '0776' => 2,
    '0778' => 2, '0779' => 2, '078' => 3,
    '0790' => 2, '0790' => 2, '0791' => 2,
    '0791' => 2, '079' => 3, '079' => 3,
    '0794' => 2, '0795' => 2, '079' => 3,
    '0795' => 2, '0796' => 2, '0796' => 2,
    '079' => 3, '0797' => 2, '0798' => 2,
    '0799' => 2, '0799' => 2, '082' => 3,
    '0820' => 2, '0820' => 2, '0823' => 2,
    '0824' => 2, '082' => 3, '0824' => 2,
    '0826' => 2, '0826' => 2, '0826' => 2,
    '0827' => 2, '0829' => 2, '083' => 3,
    '0833' => 2, '0834' => 2, '0835' => 2,
    '0836' => 2, '0837' => 2, '0837' => 2,
    '0838' => 2, '08387' => 1, '08388' => 1,
    '083' => 3, '083' => 3, '08396' => 1,
    '0845' => 2, '0846' => 2, '0846' => 2,
    '0847' => 2, '0847' => 2, '08477' => 1,
    '0847' => 2, '0848' => 2, '084' => 3,
    '084' => 3, '08512' => 1, '08514' => 1,
    '0852' => 2, '0853' => 2, '0854' => 2,
    '0854' => 2, '0854' => 2, '0854' => 2,
    '0855' => 2, '0855' => 2, '0855' => 2,
    '0856' => 2, '0856' => 2, '0857' => 2,
    '0858' => 2, '0858' => 2, '0859' => 2,
    '0859' => 2, '086' => 3, '086' => 3,
    '0863' => 2, '0865' => 2, '0865' => 2,
    '0866' => 2, '0866' => 2, '0866' => 2,
    '0867' => 2, '0867' => 2, '0867' => 2,
    '0868' => 2, '0868' => 2, '0869' => 2,
    '0869' => 2, '086' => 3, '0875' => 2,
    '0877' => 2, '087' => 3, '0879' => 2,
    '0879' => 2, '0880' => 2, '0880' => 2,
    '0880' => 2, '0880' => 2, '0883' => 2,
    '0883' => 2, '0883' => 2, '0884' => 2,
    '0884' => 2, '0884' => 2, '0885' => 2,
    '088' => 3, '0887' => 2, '0887' => 2,
    '0887' => 2, '0887' => 2, '088' => 3,
    '0889' => 2, '0889' => 2, '0892' => 2,
    '0893' => 2, '0894' => 2, '0894' => 2,
    '0895' => 2, '0895' => 2, '0896' => 2,
    '0897' => 2, '0897' => 2, '0898' => 2,
    '089' => 3, '092' => 3, '092' => 3,
    '0920' => 2, '0920' => 2, '0920' => 2,
    '093' => 3, '0930' => 2, '0940' => 2,
    '0942' => 2, '0943' => 2, '0943' => 2,
    '0944' => 2, '0946' => 2, '0947' => 2,
    '0948' => 2, '0949' => 2, '09496' => 1,
    '0950' => 2, '0952' => 2, '0954' => 2,
    '0954' => 2, '0955' => 2, '0955' => 2,
    '0956' => 2, '0957' => 2, '0957' => 2,
    '095' => 3, '0959' => 2, '0959' => 2,
    '0959' => 2, '096' => 3, '0964' => 2,
    '0965' => 2, '0966' => 2, '0966' => 2,
    '0967' => 2, '0967' => 2, '0967' => 2,
    '0968' => 2, '0968' => 2, '0969' => 2,
    '0972' => 2, '0972' => 2, '0973' => 2,
    '0973' => 2, '0974' => 2, '0974' => 2,
    '097' => 3, '0977' => 2, '0978' => 2,
    '0978' => 2, '0978' => 2, '0979' => 2,
    '098' => 3, '0980' => 2, '09802' => 1,
    '0980' => 2, '0980' => 2, '0982' => 2,
    '0982' => 2, '0982' => 2, '0983' => 2,
    '0984' => 2, '0985' => 2, '0986' => 2,
    '0987' => 2, '09912' => 1, '09913' => 1,
    '099' => 3, '0993' => 2, '0993' => 2,
    '099' => 3, '0994' => 2, '0994' => 2,
    '0995' => 2, '0995' => 2, '0996' => 2,
    '0996' => 2, '09969' => 1, '0997' => 2,
    '0997' => 2, '0997' => 2, '0997' => 2,
    '0997' => 2
    }

    # 市外局番長毎のマップを作成する
    5.downto(2) do |i|
    const_set("MAP_#{i}", MAP.select { |e| e.length == i })
    end

    def self.split(tel)
    # 市外局番の長いものから探していく
    [MAP_5, MAP_4, MAP_3, MAP_2].each_with_index do |map, index|
    len = map.first[0].length
    if map.has_key?(tel[0, len])
    len_2 = map[tel[0, len]] # 市内局番の長さ
    return [tel[0, len], tel[len, len_2], tel[(len + len_2)..-1]]
    end
    end
    # 見つからなかった
    return [tel, "", ""]
    end
    end