##QBIC, 79 bytes
QBIC, 79 bytes
::[a,b|~c%8=0|[_l!c$||_R33,116|~e>47 and e<58|e=e+z]Z=Z+chr$(e)]\Z=Z+!c$]Z=Z+@
Skipping the numbers is a costly affair, here's a version that might also randomly select 0-9
for 20 bytes less:
::[a,b|~c%8=0|[len(!c$)|Z=Z+chr$(_r33,126|)]\Z=Z+!c$]Z=Z+@
Sample output for 1, 89
1 2 3 4 5 6 7 U 9 10 11 12 13 14 15 M9 17 18 19 20 21 22 23 ^L 25 26 27 28 29 30
31 <U 33 34 35 36 37 38 39 gH 41 42 43 44 45 46 47 aJ 49 50 51 52 53 54 55 1b 57 58 59 60
61 62 63 ,C 65 66 67 68 69 70 71 ]; 73 74 75 76 77 78 79 [B 81 82 83 84 85 86 87 Ix 89
Explanation:
:: Get inputs 'a' and 'b' from the command line
[a,b| FOR(c=a; c<=b; c++)
~c%8=0| IF c is cleanly divisible by 8 THEN
_l!c$| Take the length (_l) of the string representation (! ... $) of c
[ | FOR (d = 1; d<= length(c); d++)
_R33,116| Set e to a random value in the range 33 - 116 (all the printable ascii's - 10)
~e>47 IF e falls between 47
and e<58| and 58 (ASCII code for 0-9) THEN
e=e+z e = e + 10 (z == 10 in QBIC)
] END IF
Z=Z+ Add to Z$
chr$(e)] ASCII character e
\ ELSE if c is not cleanly divisible by 8
Z=Z+!c$ Add to Z the string representation of c
] NEXT
Z=Z+@ Add a space to Z$ (@ is an implicitly delimited string literal with 1 significant space)
( Z$ is implicitly printed at end of program )