文字列, パスワード生成
文字列, パスワード生成 (String, Generate Password)

ランダム文字列を生成します。案件トークンがこの自動工程に到達すると、都度、指定した長さの文字列が生成されます。記号混在や特定文字(Iとl)は不使用といった複雑な生成ルールも実現可能です。「ユーザ初期パスワードを設定」や「ダウンロード用パスワードを設定」といった業務工程を自動化します。

2019-11-13 (C) Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/string-generate-password/

Configs
  • A: 文字グループをセットしてください (例 “acfghjknrsuxyzACFGHJKNRSUXYZ”) * #{EL}
  • a: 文字出現回数をセットしてください (例 “4”) * #{EL}
  • B: 文字グループをセットしてください (例 “23456789”) #{EL}
  • b: 文字出現回数をセットしてください (例 “4”) #{EL}
  • C: 文字グループをセットしてください (例 “#$%&+-“) #{EL}
  • c: 文字出現回数をセットしてください (例 “4”) #{EL}
  • D: 文字グループをセットしてください (例 “”) #{EL}
  • d: 文字出現回数をセットしてください (例 “”) #{EL}
  • E: 生成パスワードが格納される文字列型データを選択してください (更新) *
Script
// (c) 2019, Questetra, Inc. (the MIT License)

//////// START "main()" ////////
main();
function main(){ 


//// == Config Retrieving / 工程コンフィグの参照 ==
const groupA = configs.get( "conf_GroupA" ) + "";  // config required
const timesA = configs.get( "conf_TimesA" ) + "";  // config required
const groupB = configs.get( "conf_GroupB" ) + "";  // config not required
const timesB = configs.get( "conf_TimesB" ) + "";  // config not required
const groupC = configs.get( "conf_GroupC" ) + "";  // config not required
const timesC = configs.get( "conf_TimesC" ) + "";  // config not required
const groupD = configs.get( "conf_GroupD" ) + "";  // config not required
const timesD = configs.get( "conf_TimesD" ) + "";  // config not required
const dataIdE = configs.get( "conf_DataIdE" ) + ""; // config required

// Design-time Config Format Check
let numA = 0;
let numB = 0;
let numC = 0;
let numD = 0;
const positiveInt = /^([1-9]\d*)$/; // RegExp
if( groupA === "" ){
  throw new Error( "\n AutomatedTask ConfigError:" +
                   " Config {Group A} is empty \n" );
}
if( positiveInt.test( timesA ) ){
  numA = parseInt(timesA, 10);
}else{
  throw new Error( "\n AutomatedTask ConfigError:" +
                   " Config Number {a} is not a positive integer \n" );
}
if( groupB !== "" ){
  if( positiveInt.test( timesB ) ){
    numB = parseInt(timesB, 10);
  }else{
    engine.log( " AutomatedTask ConfigWarning:" +
                " Config Number {b} is not a positive integer" );
  }
}
if( groupC !== "" ){
  if( positiveInt.test( timesC ) ){
    numC = parseInt(timesC, 10);
  }else{
    engine.log( " AutomatedTask ConfigWarning:" +
                " Config Number {c} is not a positive integer" );
  }
}
if( groupD !== "" ){
  if( positiveInt.test( timesD ) ){
    numD = parseInt(timesD, 10);
  }else{
    engine.log( " AutomatedTask ConfigWarning:" +
                " Config Number {d} is not a positive integer" );
  }
}


//// == Data Retrieving / ワークフローデータの参照 ==
// nothing (This Service Task is a CREATE type)


//// == Calculating / 演算 ==
let tmpPassword = "";
engine.log( " AutomatedTask Number of A-Characters: " + numA );
for( let i = 0; i < numA; i++ ){
  tmpPassword += groupA.charAt( Math.floor( Math.random() * groupA.length ) );
}
engine.log( " AutomatedTask Number of B-Characters: " + numB );
for( let i = 0; i < numB; i++ ){
  tmpPassword += groupB.charAt( Math.floor( Math.random() * groupB.length ) );
}
engine.log( " AutomatedTask Number of C-Characters: " + numC );
for( let i = 0; i < numC; i++ ){
  tmpPassword += groupC.charAt( Math.floor( Math.random() * groupC.length ) );
}
engine.log( " AutomatedTask Number of D-Characters: " + numD );
for( let i = 0; i < numD; i++ ){
  tmpPassword += groupD.charAt( Math.floor( Math.random() * groupD.length ) );
}
// shuffle (Fisher-Yates)
let tmpArray = tmpPassword.split("");
let j = tmpArray.length;
while ( j > 1 ) { 
  let k = Math.floor( Math.random() * j );
  j = j - 1;
  if (j == k) continue;
  let tmp = tmpArray[j];
  tmpArray[j] = tmpArray[k];
  tmpArray[k] = tmp;
}


//// == Data Updating / ワークフローデータへの代入 ==
engine.setDataByNumber( dataIdE, tmpArray.join("") );


} //////// END "main()" ////////

Download

Capture

Notes

  1. A群からa回、B群からb回、C群からc回、D群からd回の文字選択が行われ、それらのシャッフル文字列が、Eで選択したデータ項目に格納されます
  2. EL式設定でワークフローデータを参照する設定にすれば、文字列長や文字種を動的に変化させることも可能です
  3. 組み込みの自動工程[サービスタスク(データ設定)]でも、[0-9a-zA-Z]{8} の文字列生成が可能です。 e.g. “#{#randomString(8)}”

See also

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

%d人のブロガーが「いいね」をつけました。