Possible with a custom plugin to alter the fields value at registration and making the field read only (not from field management, but done through the plugin). I believe this would require JS to do such a thing.
However, it can be done using a trigger.
Triggers List:
onBeforeEmailUserForm
onAfterEmailUserForm
onBeforeUserProfileEditDisplay
onAfterUserProfileEditDisplay
onBeforeUserProfileRequest
onBeforeUserProfileDisplay
onAfterUserProfileDisplay
onBeforeDisplayUsersList
onLostPassForm
onBeforeLoginFormDisplay
onBeforeRegisterFormDisplay
onBeforeEmailUser
onBeforeUserAvatarUpdate
onAfterUserAvatarUpdate
onStartUsersList
onAfterUsersListFieldsSql
onBeforeUsersListBuildQuery
onBeforeUsersListQuery
onStartNewPassword
onBeforeUsernameReminder
onAfterUsernameReminder
onBeforeNewPassword
onNewPassword
onBeforeRegisterForm
onStartSaveUserRegistration
onAfterUserRegistrationMailsSent
onBeforeLogin
onLoginAuthentication
onDuringLogin
onBeforeFirstLogin
onDoLoginNow
onAfterLogin
onBeforeLogout
onDoLogoutNow
onAfterLogout
onBeforeUserConfirm
onAfterUserConfirm
onBeforeUserApproval
onAfterUserApproval
onBeforeUserApproval
onGetCaptchaHtmlElements
onBeforeBackendUsersListBuildQuery
onAfterBackendUsersList
onBeforeUserBlocking
onBeforeSyncUser
onAfterSyncUser
onAfterCheckCbDb
onAfterCheckCbFieldsDb
onBeforeFixDb
onAfterFixDb
onBeforeFixFieldsDb
onBeforeUserActive
onUserActive
onBeforeDeleteUser
onAfterDeleteUser
onAfterTabsFetch
onPrepareMenus
onAfterEditATab
onAfterFieldsFetch
onBeforeAddConnection
onAfterAddConnection
onBeforeRemoveConnection
onAfterRemoveConnection
onBeforeDenyConnection
onAfterDenyConnection
onBeforeAcceptConnection
onAfterAcceptConnection
onFieldIcons
onLogChange
onBeforeUserUpdate
onBeforeNewUser
onBeforeUpdateUser
onBeforeUserRegistration
onSaveUserError
onAfterUserUpdate
onAfterNewUser
onAfterUpdateUser
onAfterUserRegistration
onBeforegetFieldRow