The reason, is that I'm creating a form that generates a random student number for a new student, but I realize that I could instead just use a certain number as a starting point and just increment it by one for each new student.

while there are some generators of the form
(a*x+b mod 2^n-1)
which take a long way to loop, they are NOT good generators.
The standard (easy) way to get good non repeating random numbers, is to create a sequence of numbers [0..N] in a list or array and the do a series of radom exchanges on the sequence.
I believe about NlogN exchanges should do (thats hte min amount it takes to sort szch numbers).
The you are absolutely sure you have N non repeating numbers.

If you are unsure of how many iterations to do, try this.
Attach a random number to each number of the sequence, and then sort the random numbers. Even if these random numbers are not unique, your attached sequence will still be so.

Okay... Even if getchoo uses a PRNG which loops without repeating elements, he will not be able to get numbers in a range less than the maximum range of the PRNG with this property, which is a bit useless. I would have said the best way to do this would be to store a hash table of all the numbers that have been generated so far, and just to multiple random probes until you find an empty slot.

The Mersenne Twister does not avoid generating the same number twice. In fact, it passes statistical tests designed to detect these occurences up to about 10^11 32-bit elements.

I guess I hadn't read getchoos last mail well enough.
I like Marks idea.
When I write quotes or bills I generate a number similarily:
printf("%4d, %2d, %3d", Year, Month, IndexStartingAt0EachMonth);
This is unique and hte number even holds some info which is good for searching.