@Override
	public NewId parse(String text) {
		if (text == null || text.isEmpty())
			throw new IllegalArgumentException("The String was null or empty");

		char[] buffer = new char[32];

		int bufferOffset = 0;
		int offset = 0;
		long number;
		for (int i = 0; i < 6; ++i) {
			number = 0;
			for (int j = 0; j < 4; j++) {
				int index = _chars.indexOf(text.charAt(offset + j));
				if (index < 0)
					throw new IllegalArgumentException(
							"Tracking number contains invalid characters");

				number = number * 32 + (index % 32);
			}

			convertLongToBase16(buffer, bufferOffset, number, 5);

			offset += 4;
			bufferOffset += 5;
		}

		number = 0;
		for (int j = 0; j < 2; j++) {
			int index = _chars.indexOf(text.charAt(offset + j));
			if (index < 0)
				throw new IllegalArgumentException(
						"Tracking number contains invalid characters");

			number = number * 32 + (index % 32);
		}
		convertLongToBase16(buffer, bufferOffset, number, 2);

		return new NewId(new String(buffer, 0, 32));
	}