Es gibt nicht nur int und char, sondern auch Texte, die aus mehr als einem Zeichen bestehen.
Eine Zahl zwischen 0 und 9999 kannst du in einem int abspeichern, für den Text "0000" brauchst du ein char TuerCode[5], wenn du sie mit print ausgeben willst. ( Damit print weiss, wie lang der Text ist, hat "1234" eine Endekennung ).
char TuerCode[5]; // definiert TuerCode[0] ... TuerCode[4]
int eins = random(0,9); // Eine Zahl, aber kein druckbares Zeichen
Serial.print(eins); // print kann sowohl Zahlen, als auch Texte drucken, was aber ganz verschiedene Sachen sind.
TuerCode[1] = 0; // das ist schon die EndeKennung
TuerCode[2] = eins; // das ist kein lesbares Zeichen
Wieso generierst Du nicht 4 Zufallszahlen im range 48 bis 57 (ashii-Wert der Zahlen von 0 bis 9) und lädst damit dein Array?
Wenn du dem "Hokuspokus" nicht traust, solltest du aber doch einen Unterschied zwischen "0", '0' und 0 erkennen.
char TextMitEinerZiffer[2] = "0"; // ( Länge 2 wegen der EndeKennung )
char EineZiffer = '1';
byte EineZahl = 2;
EineZiffer = '0' + EineZahl; // andert '1' in '2'
TextMitEinerZiffer[0] = EineZiffer; // liefert "2"
Uwe's 48 ist "zufällig" der Zahlenwert von '0'