Apexでランダム文字列を作る話

以下のような条件で、ランダム文字列を作れと言われた、
・半角大文字1文字、半角小文字1文字、数字1文字。を最低入れる。
・8文字のランダム文字列を作る。

というわけでちょこっと実装方針。
・半角大文字を定義した定数を作る。
・半角小文字を定義した定数を作る。
・数字を定義した定数を作る。
・上記の3つを合成した定数を作る。

・Math.Random()を使用し、ランダムで半角大文字から1文字抽出。
・Math.Random()を使用し、ランダムで半角小文字から1文字抽出。
・Math.Random()を使用し、ランダムで数字から1文字抽出。
・Math.Random()を使用し、ランダムで合成した文字列から5文字抽出。

・Math.Random()を使用し、文字列をシャッフル。

以下、実装内容。

/**
* 4桁以上で指定した文字列長のランダム文字列を生成します。
* 小文字1文字、大文字1文字、数字1文字必要
* @param LengthRequired 文字列長
*/
public static string getRandomString(Integer LengthRequired){

    if(LengthRequired < 3){
        return '';
    }
    String smallChar = 'abcdefghijklmnopqrstuvwxyz';
    String bigChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    String numberChar = '0123456789';
    String maxChar = smallChar + bigChar + numberChar;

    List<String> tempResult = new List<String>();
    integer position;

    // 英小文字から最低1文字選択
    position = Integer.valueof(String.valueof(Math.roundToLong((smallChar.l
ength()-1)*Math.random())));
    tempResult.add(smallChar.subst
ring(position,position+1));
    // 英大文字から最低1文字選択
    position = Integer.valueof(String.valueof
(Math.roundToLong((bigChar.length()-1)*Math.random())));
    tempResult.add(bigChar.substri
ng(position,position+1));
    // 数字から最低1文字選択
    position = Integer.valueof(String.valueof
(Math.roundToLong((numberChar.length()-1)*Math.random())));
    tempResult.add(numberChar.subs
tring(position,position+1));

    //残りは、全文字から取得
    for(Integer i = 0; i < LengthRequired - 3; i++) {
        position = Integer.valueof(String.valueof
(Math.roundToLong((maxChar.length()-1)*Math.random())));
       tempResult.add(maxChar.substri
ng(position,position+1));
    }

    //文字列の並びをランダムシャッフルする。
    String result = '';
    List<Integer> indexList = new List<Integer>();
    for(Integer i = 0; i < LengthRequired; i++){
       indexList.add(i);
    }
    for(Integer i = 0; i < LengthRequired; i++){
       position = Integer.valueof(String.valueof
(Math.roundToLong((indexList.size()-1)*Math.random())));
       result += tempResult.get(indexList.get(p
osition));
       indexList.remove(position);
    }

    return result;
}

関連記事


--------------------------------------------------------------------------------------

コメントの投稿

非公開コメント

このブログについて
  • 全記事一覧(時間順)
  • このブログについて
  • 私のプロフィール
  • 当ブログで扱っている動画について
  • 記事違いなコメントのお返事

  • カテゴリー
    twitter
    カレンダー
    03 | 2017/04 | 05
    - - - - - - 1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30 - - - - - -
    Amazon
    でたらめな当ブログにぴったりな商品を自動で表示するみたいです。



    月別アーカイブ
    プロフィール

    たづみ

    Author:たづみ
    ・1981年生まれの男
    ・もう少し詳細なプロフィールはこちらで

    最新コメント
    アクセスランキング
    [ジャンルランキング]
    日記
    708位
    アクセスランキングを見る>>

    [サブジャンルランキング]
    会社員・OL
    143位
    アクセスランキングを見る>>