Ich würde mir das doch sehr einfach machen:

d MyNum 18p 0
d MyChar 18
d MyInd 5I 0
d MyDig 1

MyNum=*zero;
for MyInd=1 to %size(MyChar);
MyDig = %subst(MyChar:MyInd:1);
if %check('0123456789':myDig)=*zero;
MyNum = MyNum*10+%dec(MyDig:1:0);
endif;
next;

Nicht nur negativ denken, sondern positiv (also eher auf gültig als ungültig prüfen).