code: def is_name_valid(fqn):
      
  
      if not isinstance(fqn, (str,unicode)):
          return False
  
      if fqn.count( "." ) != 1:
          return False
  
      name, namespace_id = fqn.split(".")
  
      if len(name) == 0 or len(namespace_id) == 0:
          return False 
  
      if not is_b40( name ) or "+" in name or "." in name:
          return False 
     
      if not is_namespace_valid( namespace_id ):
          return False
  
      if len(fqn) > LENGTHS['blockchain_id_name']:
         # too long
         return False 
  
      return True
docs: Is a fully-qualified name acceptable?
      Return True if so
      Return False if not
  
      >>> is_name_valid('abcd')
      False
      >>> is_name_valid('abcd.')
      False
      >>> is_name_valid('.abcd')
      False
      >>> is_name_valid('Abcd.abcd')
      False
      >>> is_name_valid('abcd.abc.d')
      False
      >>> is_name_valid('abcd.abc+d')
      False
      >>> is_name_valid('a.b.c')
      False
      >>> is_name_valid(True)
      False
      >>> is_name_valid(123)
      False
      >>> is_name_valid(None)
      False
      >>> is_name_valid('')
      False
      >>> is_name_valid('abcdabcdabcdabcdabcdabcdabcdabcda.bcd')
      True
      >>> is_name_valid('abcdabcdabcdabcdabcdabcdabcdabcdab.bcd')
      False
      >>> is_name_valid('abcdabcdabcdabcdabcdabcdabcdabcdabc.d')
      True
      >>> is_name_valid('a+b.c')
      False
      >>> is_name_valid('a_b.c')
      True