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 with
nothing that it would make sense to extract.