non usare il random perchè ovviamente non è sicuro...
io ho fatto così:
in delphi c'è la funzione IntToStr e StrToInt che convertono da stringa a intero e viceversa, in pascal c'è Val e Str ma non mi ricordo la loro sintassi perchè non ho il pascal sotto mano, quindi userò quelle del delphi e adattale tu.

codice:
var code,cifra1,cifra2,cifra3,cifra4:integer; scode:string;
///...............
for code:=1111 to 9999 do
  begin
  scode := IntToStr(code);
  cifra1 := StrToInt(scode[1]);
  cifra2 := StrToInt(scode[2]);
  cifra3 := StrToInt(scode[3]);
  cifra4 := StrToInt(scode[4]);

  if (cifra1*cifra2*cifra3*cifra4=12) then
    Writeln(code);
  end;
ripeto, stai facendo l'hackertrainer vero??