code: private static String formatLabel(String issuer, String accountName)
      {
          if (accountName == null || accountName.trim().length() == 0)
          {
              throw new IllegalArgumentException("Account name must not be empty.");
          }
  
          StringBuilder sb = new StringBuilder();
  
          if (issuer != null)
          {
              if (issuer.contains(":"))
              {
                  throw new IllegalArgumentException("Issuer cannot contain the \':\' character.");
              }
  
              sb.append(issuer);
              sb.append(":");
          }
  
          sb.append(accountName);
  
          return sb.toString();
      }
docs: The label is used to identify which account a key is associated with.
  It contains an account name, which is a URI-encoded string, optionally
  prefixed by an issuer string identifying the provider or service managing
  that account.  This issuer prefix can be used to prevent collisions
  between different accounts with different providers that might be
  identified using the same account name, e.g. the user's email address.
  The issuer prefix and account name should be separated by a literal or
  url-encoded colon, and optional spaces may precede the account name.
  Neither issuer nor account name may themselves contain a colon.
  Represented in ABNF according to RFC 5234:
  <p/>
  label = accountname / issuer (“:” / “%3A”) *”%20” accountname
  
  @see <a href="https://code.google.com/p/google-authenticator/wiki/KeyUriFormat">Google Authenticator - KeyUriFormat</a>