However, if all it is doing is checking the number is 'numeric' and checking it's length, how can this be improved in a single line of code?
I repeat: it does not check if the subject is numeric. It checks if the subject contains numeric elements. As for improvement: that depends on what you want to do. For example, if you want to check if $creditcard has 1 to 20 digits only, you might write:
if (preg_match('/^\d{1,20}$/', $creditcard)) {
// Credit card number has 1 to 20 digits only.
// ...
}