There is simply no point in "taking the first nine numbers out".And there shouldn't BE a test for the string being empty, anywhere.'' '-' '---' and so on should all be handled the same way.
Oh well, what stops you doing
���� digits := aString select: [:each | each ~= $-].���� digits size = 10 ifFalse: [^false].���� lastDigit := digits la ost.���� digits := digits copyFrom: 1 to: 9.���� ( (lastDigit = $X or: [lastDigit isDigit]) and: [
�������� digits allSatisfy: #isDigit]���� ) ifFalse: [^false].
Now my code does not do this, but it is just 16 lines of code withnothing that it would make sense to extract.