One of the fundamentally important integration layer functions in the SCORM Engine is GetLearnerInformation. It is implemented in every SCORM Engine implementation and allows the integration layer to collect the first name, last name, and user name for a given user (based on the registration information provided at launch). First name and last name are straightforward, because they are neither ambiguous nor used for anything beyond display purposes. User name, however, carries some particular meaning and can often be a difficult choice.
The cmi.learner_id data model element identifies the learner on behalf of whom the SCO was launched. The cmi.learner_id shall be unique at least within the scope of the SCO . How the cmi.learner_id is assigned is outside the scope of SCORM. One typical case on how learner_ids are assigned is through some learner registration process defined by the LMS. The cmi.learner_id identifies the learner in a given LMS.
What this means is that we're looking for something that is unique but experience also tells us that we want a value that is human readable. This value is occasionally displayed in a piece of content like this, "You are logged in as timmartin." This sort of usage points to using something readable, even at the expense of uniqueness.
UserID, however, has two other uses that point toward uniqueness as a priority. Some pieces of content, particularly remotely hosted content from companies like Mindleaders and Questionmark use the UserID to inform their systems of the identity of the user. If you choose a non-unique identifer for the UserID, then it's possible that the two learners who share a displayable UserID in your system will be identified as the same learner in the remote content provider's system.
Similiarly, in most of our SCORM Engine implementations, the UserID is also used as the global_objective_scope. Global objective scope relates to SCORM 2004 global objectives which allow SCO's to reach beyond their typical data scope (which is the SCO itself). By defining this scope with a non-unique identifier, you take a similar risk of users' data overlapping. [Note: It is possible in the SCORM Engine to use different values for the global_objective_scope and the user id provided to the content. You still run the risk, however, of providing a non-unique value to the remote content server.
So, a conclusion regarding UserID... please choose something unique. In a system where the only unique item is a system generated number or guid, this is a challenge. Ultimately, it's probably worth sacrificing the beauty in the piece of content in order to maintain that crucial uniqueness.