Golang 之 Base62 编码

Base62 编码用62个可见字符来编码信息,也就是所谓的62进制,可用于缩短地址之类的。实现起来也很简单。当然,这个实现跟别人家的有可能不一样,反正自己能编能解就行。

package main

import (
	"math"
	"bytes"
	"strings"
)

const CODE62  = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
const CODE_LENTH = 62

/**
 * 编码 整数 为 base62 字符串
 */
func Encode(number int) string {
	if number == 0 {
		return "0"
	}
	result := make([]byte , 0)
	for number > 0 {
		round  := number / CODE_LENTH
		remain := number % CODE_LENTH
		result = append(result,CODE62[remain])
		number  = round
	}
	return string(result)
}

/**
 * 解码字符串为整数
 */
func Decode(str string) int {
	str = strings.TrimSpace(str)
	var result int = 0
	for index,char := range []byte(str){
		result += bytes.IndexByte([]byte(CODE62),char) * int(math.Pow(CODE_LENTH,float64(index)))
	}
	return result
}

  

里面硬编码了 CODE_LENGTH 是不想每次去算一下长度,省点时间。

另外,最后几行的 bytes.IndexByte 其实可以换成别的方式,不用每次都查,这样的话可以提高点性能,提升一点是一点嘛。

好吧,项目中在用的其实已经改了。

时间: 2024-07-28 19:27:04

Golang 之 Base62 编码的相关文章

PHP base62编码解码实现

1 <?php 2 /** 3 * @desc base62编码解码实现 4 * @param String $data 5 * @author Space 6 * @date 2014/8/6 7 **/ 8 9 function base62_encode($data){ 10 $base62str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 11 $data = strval($data); 12

golang中文字符编码转换

golang 有很多需要将中文转成utf8的 网上搜到一个直接转的,记录下,备用 package main import "golang.org/x/text/encoding/simplifiedchinese" type Charset string const ( UTF8 = Charset("UTF-8") GB18030 = Charset("GB18030") ) func ConvertByte2String(byte []byt

微博第三方登录

首先第三方应用要跟新浪微博帐号合作,然后按照下面的方法操作: 第一步:注册应用. 可以通过新浪微博的开放平台去注册一个应用.之后你会得到一个App Key和一个App Secret.拥有它们,你才可以申请权限. 假设你的App Key是“1234567890”,App Secret是“abcdefghijklmnopqrstuvwxyz" 第二步:写代码. 将获取到的OAuth的php版本加入你的project中.将你申请到的Key和Secret做为两个变量定义并赋值. 对于OAuth来说,很多

PHP TP模板下的微博登录(wap)

1.微博登录的申请在微博开放平台: 记住千万不要傻傻等,给他们客户电话或邮件,客服会QQ加你,很快解决问题. 新浪微博 OAuth 认证类(OAuth2) 授权机制说明请大家参考微博开放平台文档:{@link http://open.weibo.com/wiki/Oauth2} 贴出核心的代码: <?php /** * PHP SDK for weibo.com (using OAuth2) * * @author Elmer Zhang <[email protected]> */ /

生成邀请码

1.微博短链接算法,56E能够保证重复率很低,生成6位,如果角色命中率高可以用生成8位,而且每个md5的结果可以生成4个可选短链接,增加了不重复率 md5的源可以是pid+time 但这个要处理重复情况,redis那边要事务管理 2.对pid进行处理,定9-64种位置打乱规则,每次随机一种,然后对pid(补全固定10个字符)进行打乱,打乱后把打乱类型放到最前面用于标识,然后对这串进行base64 或者base62 编码,可以把11字符长度缩减到6-8.

封装各种生成唯一性ID算法的工具类

/** * Copyright (c) 2005-2012 springside.org.cn * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.minxinloan.common.utils; import java.security.SecureRandom; import java.util.UUID; /** * 封装各种生成唯一性ID算法的工具类. * @aut

Go语言中的rune类型浅析

rune是Go语言中一种特殊的数据类型,它是int32的别名,几乎在所有方面等同于int32,用于区分字符值和整数值 1 package main 2 3 import "fmt" 4 5 func main() { 6 7 var str = "hello 世界" 8 fmt.Println("len(str):", len(str)) 9 10 } 这段代码的执行结果为: len(str):12 从字符串字面值看len(str)的结果应该是8

golang编码转换

在网上搜索golang编码转化时,我们经常看到的文章是使用下面一些第三方库: https://github.com/djimenez/iconv-go https://github.com/qiniu/iconv 如果我们在windows下使用这个库,会看到错误: iconv.go:6:20: fatal error: iconv.h: No such file or directory compilation terminated. 这是因为需要系统有 iconv.h 文件. linux.ma

Golang 处理 Json(一):编码

JSON 是一种数据格式描述语言.以 key 和 value 构成的哈系结构,类似 Javascript 中的对象,python 中的字典.通常 json 格式的 key 是字符串,其值可以是任意类型,字串,数字,数组或者对象结构.更多关于 Json 的可以访问 JSON 了解. 数据结构 map json 源于 Javascript 的对象结构,golang 中有直接对应的数据结构 map,可是 golang 的 map 也是 key-value 结构,同时 struct 结构体也可以描述 j