It looks like several one-digit boxes (usually six), but the implementation recommended for accessibility and autofill is a single <input> with autocomplete="one-time-code" and inputmode="numeric" — that lets iOS/Android surface the SMS code as a keyboard banner, and the WebOTP API can hand the code to your JS directly after one user consent. If you still want the boxed look, splitting one input visually with letter-spacing and keeping real separate inputs per box (auto-advancing focus on each keystroke) are both common — the latter needs a positional label on each box, like "digit 1 of 6."
It differs from a number input (spinner) — a number input is tuned for raising or lowering one quantity, while an OTP input is tuned for a fixed-length string that needs to be filled fast, via paste or autofill, within a short window.
Supporting paste (dropping all six digits at once) needs its own handling in the paste event — slicing the string and distributing one character per box.