code: def nhs_number_from_text_or_none(s: str) -> Optional[int]:
        # noqa
      # None in, None out.
      funcname = "nhs_number_from_text_or_none: "
      if not s:
          log.debug(funcname + "incoming parameter was None")
          return None
  
      # (a) If it's not a 10-digit number, bye-bye.
  
      # Remove whitespace
      s = WHITESPACE_REGEX.sub("", s)  # replaces all instances
      # Contains non-numeric characters?
      if NON_NUMERIC_REGEX.search(s):
          log.debug(funcname + "contains non-numeric characters")
          return None
      # Not 10 digits long?
      if len(s) != 10:
          log.debug(funcname + "not 10 digits long")
          return None
  
      # (b) Validation
      n = int(s)
      if not is_valid_nhs_number(n):
          log.debug(funcname + "failed validation")
          return None
  
      # Happy!
      return n
docs: Returns a validated NHS number (as an integer) from a string, or ``None``
      if it is not valid.
      
      It's a 10-digit number, so note that database 32-bit INT values are
      insufficient; use BIGINT. Python will handle large integers happily.
      
      NHS number rules:        
      http://www.datadictionary.nhs.uk/version2/data_dictionary/data_field_notes/n/nhs_number_de.asp?shownav=0