概要

  • 重複のないランダムなキーの一群を作る。
  • キーの長さと使用可能文字数が、キーの個数に対して十分かどうかチェック。(2007/06/18)
  • Text::CSV_XS, Win32::Unicode::Native を使用するようにした。(2013/06/07)

ソース

  • filecreateUniqKeyList.zip
    すべてを展開すべてを収束
      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
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
    
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    -
    |
    !
     
     
     
     
     
     
     
     
    -
    |
    |
    -
    |
    !
    |
    |
    !
     
     
     
     
     
     
    -
    |
    !
     
     
     
     
    -
    |
    |
    -
    |
    !
    |
    |
    !
     
     
    
    # ユニークキー作成スクリプト
    # by take-ash
    # 2013.06.07
    #
    # 重複のないランダムなキーの一群を作る。
     
    use strict;
    use warnings;
    use utf8;
    use Encode;
    use Text::CSV_XS;
    use Win32::Unicode::Native;
     
    my $charsetFile = 'UTF-8';
     
    my $fileNameOut    = 'uniqueKeys.txt';    # 出力ファイル名。
    my $keyLength = 6;            # キーの長さ
    my $keyMax = 50;            # キーの個数
    my $possibleChar =             # 使用可能文字
    #	'あいうえお' .
        'ABCDEFGHIJKLMNOPQRSTUVWXYZ' .
        'abcdefghijklmnopqrstuvwxyz' .
        '0123456789';
    my $keyCharMax = length( $possibleChar );
     
    if ( ( $keyCharMax ** $keyLength ) < $keyMax ){
        die( "Too short KeyLength or Too few PossibleChar against KeyMax.\n" );
    }
     
    my %keyPool = ();
    my @keyList = ( [ 'ID', 'Key' ] );
     
    srand( time );
     
    $| = 1;
     
    for( my $i=1; $i <= $keyMax; ++$i ){
        printf( "%d/%d\r", $i, $keyMax );
        my $tmpKey = makeNewKey();
        while( $keyPool{ $tmpKey } ){
            $tmpKey = makeNewKey();
        }
        $keyPool{ $tmpKey } = 1;
        push( @keyList, [ $i, $tmpKey ] );
    }
    print "\n";
    $| = 0;
     
    my $csv = Text::CSV_XS->new({ binary => 1, sep_char => "\t", eol => $/ });
    open( my $OUT, ">:encoding($charsetFile)", $fileNameOut ) 
        or die( "$fileNameOut: $!\n" );
    foreach my $row ( @keyList ){
        $csv->print( $OUT, $row );
    }
    close( $OUT );
     
    exit;
     
    sub makeNewKey {
        my $result = '';
     
        while( length( $result ) < $keyLength ){
            $result .= substr( $possibleChar, int( rand( $keyCharMax ) ), 1 );
        }
     
        return $result;
    }
     
    # EOF
    

添付ファイル: filecreateUniqKeyList.zip 186件 [詳細]

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Fri, 07 Jun 2013 14:52:34 JST (1781d)