code: def _build_id_tuple(params, spec):
      
  
      # Handle situations where the spec is not known at setup time
      if spec is None:
          return (None, None)
  
      required_class = spec.class_
      required_tag = spec.tag
  
      _tag_type_to_explicit_implicit(params)
  
      if 'explicit' in params:
          if isinstance(params['explicit'], tuple):
              required_class, required_tag = params['explicit']
          else:
              required_class = 2
              required_tag = params['explicit']
      elif 'implicit' in params:
          if isinstance(params['implicit'], tuple):
              required_class, required_tag = params['implicit']
          else:
              required_class = 2
              required_tag = params['implicit']
      if required_class is not None and not isinstance(required_class, int_types):
          required_class = CLASS_NAME_TO_NUM_MAP[required_class]
  
      required_class = params.get('class_', required_class)
      required_tag = params.get('tag', required_tag)
  
      return (required_class, required_tag)
docs: Builds a 2-element tuple used to identify fields by grabbing the class_
      and tag from an Asn1Value class and the params dict being passed to it
  
      :param params:
          A dict of params to pass to spec
  
      :param spec:
          An Asn1Value class
  
      :return:
          A 2-element integer tuple in the form (class_, tag)