A SIM contains multiple phonebook sections. One of them stores your SIM contacts. Another section contains "My Numbers" (MSISDN) with a max capacity of 3 numbers, usually.
Unfortunately, my phones are too new to access "My Numbers", and my phones that are old enough (2005) to edit them are out of reach.
Fortunately, I had a spare SIM800 development board lying around. I hooked it up to my Arduino and started issuing AT commands.
Here's my conversation with my SIM card:
AT <-- Check if we are live and communicating with the SIM
OK
AT+CNUM? <-- Get own number
ERROR <-- CNUM failed, we don't have an "own" number
at+cpbs="ON" <-- Switch to "ON" phonebook: MSISDN (SIM own numbers)
OK
at+cpbs? <-- Get capacity of current phonebook
+CPBS: "ON",0,3 <-- Notice that there's no stored number (0 out of 3)
OK
at+cpbw=,"+639950001234" <-- Saving my number
OK
at+cpbs? <-- Get capacity of current phonebook
+CPBS: "ON",1,3 <-- Number saved (now consuming 1 out of 3 slots)
OK
at+cnum <-- Get own number
+CNUM: ,"+639950001234",145,,4 <-- CNUM OK
OK
AT
OK
Unplugged, then returned SIM to phone. After that, my phone now shows my number +639950001234
instead of "Unknown".