xc1sr
@xc1sr

Как можно доработать генератор паролей в гугл таблицах?

Добрый день. У меня имеется генератор паролей. В нем можно переключать чекбоксы и получать (или не получать) заранее указанные цифры, буквы и спецсимволы. Далее они попадают все в одну ячейку. Оттуда командой ПСТР(адрес_ячейки;СЛУЧМЕЖДУ(1;ДЛСТР(адрес_ячейки));1) выбирается одно случайное значение и путем повторения я получаю, собственно, пароль. Проблема в том что если пользоваться таким методом то сложно получить программируемую генерацию, а именно: к примеру мне нужно чтобы гарантировано генерировался пароль только с 1 спецсимволом. Но в данной конфигурации их может быть и больше, а может и не быть совсем.
Пробовал сделать каждый символ пароля отдельными ячейками где все ячейки будут выводить буквы и цифры без спецсимволов, а одна ячейка только спецсимволы (чтобы гарантировать их появление в пароле), но это уже будет определенный порядок.
Подскажите пожалуйста как это можно доработать.
  • Вопрос задан
  • 281 просмотр
Пригласить эксперта
Ответы на вопрос 1
ProgrammerForever
@ProgrammerForever Куратор тега Google Sheets
Учитель, автоэлектрик, программист, музыкант
=ArrayFormula(let(
 symbols;LAMBDA(from;to;ArrayFormula(JOIN(;СИМВОЛ(SEQUENCE(abs(КОДСИМВ(to)-КОДСИМВ(from))+1;1;МИН(КОДСИМВ(from);КОДСИМВ(to)))))));
 
 alphabetEn;symbols("a";"z")&symbols("A";"Z");
 alphabetRu;symbols("а";"я")&symbols("А";"Я")&"ёЁ";
 specString;"!""№;%:?*()_+@#$%^&*\|/.,-='{}[]<>`~"; 
 numbers;"0123456789";
 
 generate;lambda(fromText;count;join("";ПСТР(fromText;ОКРУГЛВВЕРХ(randarray(count)*ДЛСТР(fromText));1)));
 
 letterEn;lambda(count;ЕСЛИ(count<=0;"";generate(alphabetEn;count)));
 letterRu;lambda(count;ЕСЛИ(count<=0;"";generate(alphabetRu;count))); 
 spec;    lambda(count;ЕСЛИ(count<=0;"";generate(specString;count)));
 numeric; lambda(count;ЕСЛИ(count<=0;"";generate(numbers   ;count)));
 shuffle;lambda(txt;join("";array_constrain(SORT({ПСТР(txt;SEQUENCE(ДЛСТР(txt));1)\RANDARRAY(ДЛСТР(txt))};2;1);ДЛСТР(txt);1)));
 
 passw;lambda(enCount;ruCount;specCount;numsCount;
  shuffle( letterEn(enCount) & letterRu(ruCount) & spec(specCount) & numeric(numsCount) )
 );
 
 passw(2;2;2;2)
))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы