My recommendation was however to not use a two field PK, but just the integer field. Assuming you use MySQL, the non standard BIGINT UNSIGNED can contain up to 18 billion billion or something like that, while INT UNSIGNED limits you to 4 billion.
As for the account number, that depends on how to use it, what information it carries (if any, other than being uniqie). For example
CREATE TABLE account(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
) AUTO_INCREMENT = 10000000
Now, you use an integer, you get an automatic new unique number each time, and it has 8 digits, at least until you run out of numbers. Creating an INSERT trigger to check that it contains 8 digits may be an idea.
But if you have requirements such that specific digits' values are used for specific account types, or that your range is restricted etc, you should probably go with a string where you set the specific digits to match your needs/options, and then fill in the rest.
Also, if you are not allowed to use sequential incrementation of account numbers, you will have to come up with a way of assigning random account numbers, and care needs to be take. With your 8 digit account number you have 99999999 - 10000000 + 1 = 90000000 possible account numbers. It seems a lot, but your birthday bound (first expected collision) is no more than about 11000 account numbers using an ordinary random generator.
As your number of used account numbers gets to some significant fraction of all possible numbers, you may have to devise a strategy to deal with the problem of increasing collision. And once you get to this point, it will be harder to deal with the problem than doing so up front. I've never had to care about something like this, so it's possible there are better options available to you, but one strategy would be to keep all possible account numbers pre-generated, and either delete them or marked them as used as you create new accounts.
And if you need to deal with this issue combined with the things I mentioned before, such as numbers starting with 5 being restricted to individuals, 6 for corporations or whatever they may be, you could stick your numbers in different tables matching these needs.
When you need an account number, you can select one randomly, and do not forget to aqcuire an exclusive read lock on the row, then delete the row once you've read the value. Otherwise you once again risk dplicate key inserts.