I think this depends largely on just what you want these 'vnums' to do.
At a rudimentary level you could just use a static variable counter to tick
off numbers in serial. However, it might make sense to have the tag
follow some sort of structure, for the sake of everyone's sanity. Diku-ish
muds assign blocks of numbers according to zones, which is an
arbitrary amalgam of rooms, objects, and npcs. The benefit to this, of
course, is that one can know which 'area' a given object belongs to by
simply looking at the vnum. As the previous poster alluded to, while
blocks of vnums are associated with a given 'area,' the assignment of
vnums within that block is arbitrary.
My mud project is going with a hybrid system; our C++/OOP-based
Object system blurs the distinctions between objects of all sorts, so a
division according to 'type' is impractical. Instead, each object's id
contains discrete data (e.g., prototype id, instance number, etc) that can
be used to trace its origins. Each of the sections is separated by a
delimeter, with the idea being that people can use abbreviations to refer
to 'local' objects.
Not sure if that's what you are looking for, but good luck in any case :)