How to do Randi with letters

7 views (last 30 days)
Shahar ben ezra
Shahar ben ezra on 27 Apr 2021
Commented: Shahar ben ezra on 28 Apr 2021
Is it possible to do the RANDI function with letters?
And you will see an example like this:
X7S7-6S6A-Y555-U75T
for i=1:4
r(i)= randi([1000,9999],1,1);
end
r= num2str(r);
fprintf('Your code is -"%s"',r)
the print look like : Your code is -"4818 3432 2773 8395"
tnx :)

Accepted Answer

Jan
Jan on 27 Apr 2021
Edited: Jan on 27 Apr 2021
Provide a pool with valid characters and use randi() to determine the random indices:
Pool = ['A':'Z', '0':'9'];
Key = Pool(randi(numel(Pool), 1, 16));
KeyC = cellstr(reshape(Key, 4, []).');
KeyS = strjoin(KeyC, '-');
fprintf('Your code is: %s', KeyS)
Your code is: MOFK-PDFC-SPEA-4F80
% Or after creation of [Key]:
KeyS = sprintf('%c%c%c%c-%c%c%c%c-%c%c%c%c-%c%c%c%c', Key); % ugly

More Answers (1)

Steven Lord
Steven Lord on 27 Apr 2021
There's no need for the first loop since randi can create a vector of values.
r = randi([1000,9999],1,4)
r = 1×4
6622 6127 8429 7519
Since you're using a release that includes string I'd use that.
S = string(r)
S = 1×4 string array
"6622" "6127" "8429" "7519"
Now you can join the strings in S together.
code = "Your code is - " + join(S, " ")
code = "Your code is - 6622 6127 8429 7519"
There are other ways you can "do randi with letters" particularly for your first example where you wanted something like "X7S7-6S6A-Y555-U75T"
allowedChars = ['A':'Z' '0':'9'];
whichChars = randi(numel(allowedChars), [4 4]);
selectedChars = allowedChars(whichChars)
selectedChars = 4×4 char array
'XA3C' 'WCML' 'IS22' 'J248'
Now turn each of those vectors into strings and join them as before.
code = "Your code is - " + join(string(selectedChars), " : ")
code = "Your code is - XA3C : WCML : IS22 : J248"

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!