Based on what little I know of the system, I'd say it's not possible because certain codes require separation periods and some don't. Thus you cannot control the use of the period separator by making it a fixed part of the mask. AFAIK, the mask would need to make it either always required or never. A table for each classification level might be the way to go, controlling the input of level data with cascading combo boxes, but I lack the sufficient knowledge of the system to say for sure. Research cascading combos and you might be able to merge that information with what you know of the system.
Sounds like you would be storing the entire call number as a single value. Depending on what you intend to get out of your db, this might not be the best approach. Separating 900's from PER would be easier if you stored the primary, secondary and tertiary values in separate fields. Since 805 is shelved before 81, it raises the question, does the db need to order the records according to the shelf order? In that case, some or all of the levels would need to be text data type and not numbers.
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.