REXX: credit card number generator and validator

This REXX program generates credit card numbers (16 digits – no Amex), checks if the number is valid using Luhn algorithm and prints it to OUTDD.

/**************************** REXX *********************************/

"FREE FI(outdd)"
"ALLOC FI(outdd) DA('Z00324.OUTPUT(CUST16)') SHR REUSE"

out_ctr = 0                    

valid_count = 0
DO WHILE (valid_count < 500)
  CALL GENERATE
  ccvalid.1 = randomcc
  CALL LUHN                   
    IF LUHN(ccvalid.1) THEN
      DO
        "EXECIO 1 DISKW outdd (STEM ccvalid. "
        out_ctr = out_ctr + 1        
        valid_count = valid_count + 1
      END
END
IF out_ctr > 0 THEN             
  DO                               
  "EXECIO 0 DISKW outdd (FINIS" 
  SAY 'File outdd now contains ' out_ctr' lines.'
END
ELSE                         
  DO                         
   "EXECIO 0 DISKW outdd (OPEN FINIS"  
   SAY 'File outdd is now empty.'
   END
"FREE FI(outdd)"
EXIT

GENERATE:
DO x=1 to 4 by 1
  randomdig.x = RANDOM(1000,9999)
END
randomcc = randomdig.1 || randomdig.2 ||  randomdig.3 || randomdig.4
RETURN

LUHN:                     
  sum=0                                
  even=0                               
    DO i=length(randomcc) TO 1 BY -1   
    c=SUBSTR(randomcc,i,1)             
  IF even THEN DO                      
    c=c*2                              
    IF c>=10 THEN                      
      c=c-9                            
    END                                
  even=\even                           
  sum=sum+c                            
  END
RETURN right(sum,1)=0