The SQLIdGenerator and TransientIdGenerator implement the atg.service.idgen.IdGenerator interface, and extend the AbstractSequentialIdGenerator abstract class. If you want to create your own IdGenerator implementations, it is probably best to extend AbstractSequentialIdGenerator.

The SQLIdGenerator and TransientIdGenerator implementations happen to generate sequential IDs, but that does not have to be true for all IdGenerator implementations. The AbstractSequentialIdGenerator includes two empty hook methods, postGenerateLongId() and postGenerateStringId(), that you can override in a subclass to provide additional ID generation logic.