找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6018|回复: 3

[开源] 生成随机字符串

[复制链接]

2

主题

11

回帖

0

精华

铜牌会员

积分
45
发表于 2011-5-8 02:02:25 | 显示全部楼层 |阅读模式
估摸着以后极有可能使用到,于是写了一个生成随机字符串的函数。可以自定义生成规则,生成字符串长度。模仿了MS的函数风格,生成规则使用宏的或且规则,返回值使用了布尔型。这里使用布尔返回可能作用不大。直接贴代码吧,同样是两个文件。


RandomString.h
#pragma once
  
#define RdAllType                    0x07    //′óD?D′oíêy×?
#define RdNum                        0x01    //êy×?
#define RdLowercase            0x02    //D?D′
#define RdUppercase            0x04    //′óD′
static TCHAR szAllChar[] = _T("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
  
bool fnRandomString(const int nLeng, TCHAR *RandStringInput, const int nType);




注释用了中文,插件粘贴对中文支持不好:

#define RdAllType                    0x07    //大小写和数字
#define RdNum                        0x01    //数字
#define RdLowercase            0x02    //小写
#define RdUppercase            0x04    //大写

RandomString.cpp
#include "stdafx.h"
#include "RandomString.h"
#include <stdlib.h>
#include <time.h>
  
bool fnRandomString(const int nLeng, TCHAR *RandStringInput, const int nType)
{
    if (0 == nLeng)
    {
        return true;
    }
    if (nLeng < 0)
    {
        return false;
    }
  
    srand((unsigned int)time(NULL));
    bool bRet = false;
    int nMin = 0;
    int nMax = 62;
    switch(nType & RdAllType)
    {
    case RdAllType:
        break;
    case RdNum:
        nMin = 52;
        break;
    case RdNum | RdLowercase:
        nMin = 26;
        break;
    case RdNum | RdUppercase:
        nMin = 26;
        break;
    case RdUppercase:
        nMax = 25;
        break;
    case RdUppercase | RdLowercase:
        nMax = 51;
        break;
    case RdLowercase:
        nMin = 26;
        nMax = 51;
        break;
    default:
        return false;
        break;
    }
  
  
    int nRange = nMax - nMin;
    if (nType == (RdNum | RdUppercase))
    {
        int nNum = 0;
        for (int t = 0; t <= nLeng; t++)
        {            
            nNum = nMin + rand()%nRange;
            if (nNum < 52)
            {
                nNum -= 26;
            }
            RandStringInput[t] = szAllChar[nNum];
        }
    }
    else
    {
        for (int t = 0; t <= nLeng; t++)
        {            
            RandStringInput[t] = szAllChar[nMin + rand()%nRange];
        }
    }
  
    //int tt = 0;
    //while (RandStringInput[tt])
    //{
    //    printf("%c ", RandStringInput[tt]);
    //    tt++;
    //}
  
    return true;
}




VS2010下编译通过。

评分

参与人数 1水晶币 +20 收起 理由
马大哈 + 20 支持发代码:)

查看全部评分

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-5-8 18:04:28 | 显示全部楼层
支持一下!!
我就是嗷嗷叫的老马了......

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-5-8 18:04:28 | 显示全部楼层
支持一下!!
我就是嗷嗷叫的老马了......

2

主题

11

回帖

0

精华

铜牌会员

积分
45
 楼主| 发表于 2011-5-10 17:58:44 | 显示全部楼层
谢谢马队长。。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表