RailsでApp storeやgoogle playのような英数字のコードを発行したくなったので、その時のメモ。
ユーザーストーリー
運営が発行した英数字のコードをユーザーが受け取り、アプリに入力して何かしらの特典をうけとる。
使用する英数字を決める
今回は大文字アルファベットと数字を使うことにします。
そこで重要なのは、0とOや、1とIなどの紛らわしい文字を使用しないようにすることです。
「英語 数字 間違えやすい」などでググるといろいろ出てきます。
下記にまとめてくれている方がいました。
http://miniminiadmin.jugem.jp/?eid=389
今回は下記を除くことにします。
- 0/O
- 1/I
ランダムな英数字を発行する
下記の記事を参考にしました。
http://www.xmisao.com/2014/02/15/how-to-generate-a-random-string-in-ruby.html
下記のようにすると大文字アルファベットのランダムな12桁の文字列が得られます。
(0...12).map { ('A'..'Z').to_a[rand(('A'..'Z').length)] }.join
最終的な実装
UNAVAILABLE_ALPHABETS= ['O','I']
UNAVAILABLE_NUMBERS = ['0','1']
alphabets = ('A'..'Z').to_a.select{ |a| !UNAVAILABLE_ALPHABETS.include?(a) }
numbers = ('0'..'9').to_a.select{ |n| !UNAVAILABLE_NUMBERS.include?(n)}
o = alphabets+numbers
code = (0...12).map { o[rand(o.length)] }.join
さいごに
o.sample(12).join
のようにするとよりカッコいいかもしれません。