generatePassword static method

String? generatePassword(
  1. bool isNumberActive,
  2. bool isSpecialCharacherActive,
  3. bool isUpperCaseActive,
  4. bool isLowerCaseActive,
  5. int length,
)
  • Info: Generate password.
  • Params: isNumberActive determines access code will include number 0-9 or not, isSpecialCharacherActive enables / disables special character, isUpperCaseActive enables / disables uppercase letters, isLowerCaseActive enables / disables lowercase letters, length is access code length.
  • Returns: String?
  • Notes:

Implementation

static String? generatePassword(
    bool isNumberActive,
    bool isSpecialCharacherActive,
    bool isUpperCaseActive,
    bool isLowerCaseActive,
    int length) {
  try {
//ASCII bounds.
    int minUpperLetter = 65;
    int maxUpperLetter = 90;

    int minLowerLetter = 97;
    int maxLowerLetter = 122;

    var specialChars = ["!", "#", "\$", "%", "&", "@", "*", "^"];

    StringBuffer sb = StringBuffer(); // String builder.
    Random rng = Random(); // Random number generator

    for (int i = 0; i < length; i++) {
      int choice;

      choice = rng.nextInt(
          4); // Four status available: * Uppercase letter, Lowerccase letter, number, special character

      if (choice == 0) // If 0 comes. lower a-z.
      {
        if (isLowerCaseActive) {
          int rangeLower = minLowerLetter +
              rng.nextInt((maxLowerLetter - minLowerLetter) + 1);
          sb.writeCharCode(rangeLower);
        } else {
          if (isUpperCaseActive) {
            int rangeUpper = minUpperLetter +
                rng.nextInt((maxUpperLetter - minUpperLetter) + 1);
            sb.writeCharCode(rangeUpper);
            continue;
          }

          if (isNumberActive) {
            sb.write(rng.nextInt(10));
            continue;
          }

          if (isSpecialCharacherActive) {
            var selectID = rng.nextInt(specialChars.length);
            sb.write(specialChars[selectID]);
            continue;
          }
        }
      } else if (choice == 1) // 1 comes, upper A-Z.
      {
        if (isUpperCaseActive) {
          int rangeUpper = minUpperLetter +
              rng.nextInt((maxUpperLetter - minUpperLetter) + 1);
          sb.writeCharCode(rangeUpper);
        } else {
          if (isLowerCaseActive) {
            int rangeLower = minLowerLetter +
                rng.nextInt((maxLowerLetter - minLowerLetter) + 1);
            sb.writeCharCode(rangeLower);
            continue;
          }
          if (isNumberActive) {
            sb.write(rng.nextInt(10));
            continue;
          }

          if (isSpecialCharacherActive) {
            var selectID = rng.nextInt(specialChars.length);
            sb.write(specialChars[selectID]);
            continue;
          }
        }
      } else if (choice == 2) // 2 comes. a number 0-9.
      {
        if (isNumberActive) {
          sb.write(rng.nextInt(10));
        } else {
          if (isLowerCaseActive) {
            int rangeLower = minLowerLetter +
                rng.nextInt((maxLowerLetter - minLowerLetter) + 1);
            sb.writeCharCode(rangeLower);
            continue;
          }
          if (isSpecialCharacherActive) {
            var selectID = rng.nextInt(specialChars.length);
            sb.write(specialChars[selectID]);
            continue;
          }
          if (isUpperCaseActive) {
            int rangeUpper = minUpperLetter +
                rng.nextInt((maxUpperLetter - minUpperLetter) + 1);
            sb.writeCharCode(rangeUpper);
            continue;
          }
        }
      } else // 3 comes. special characters.
      {
        if (isSpecialCharacherActive) {
          var selectID = rng.nextInt(specialChars.length);
          sb.write(specialChars[selectID]);
        } else {
          if (isUpperCaseActive) {
            int rangeUpper = minUpperLetter +
                rng.nextInt((maxUpperLetter - minUpperLetter) + 1);
            sb.writeCharCode(rangeUpper);
            continue;
          }
          if (isLowerCaseActive) {
            int rangeLower = minLowerLetter +
                rng.nextInt((maxLowerLetter - minLowerLetter) + 1);
            sb.writeCharCode(rangeLower);
            continue;
          }
          if (isNumberActive) {
            sb.write(rng.nextInt(10));
            continue;
          }
        }
      }
    }

    return sb.toString();
  } catch (e) {
    return null;
  }
}