Rick,
RobPratt would think this is a piece of cake for SAS/OR , especially for a large N and many d variables.

proc datasets library=work nolist nodetails kill;
quit;
%macro introduce(n=);
%do i=1 %to &n.;
proc optmodel;
var d{1..3} integer >=1 <=9;
con con: &i.*(d[3]+d[2]+d[1])=100*d[3]+10*d[2]+d[1] ;
solve with clp/findallsolns;
create data want_&i. from [solution]={s in 1.._NSOL_} n=&i. d1=d[1].sol[s] d2=d[2].sol[s] d3=d[3].sol[s];
quit;
%end;
%mend;
ods select none;
%introduce(n=30);
ods select all;
data all;
set want:;
run;
proc print data=all ;run;