• 如何随机生成指定数目的国标汉字?



      为了使每一个汉字有一个全国统一的代码,1980年,我国颁布了第一个汉字编码的国家标准: GB2312-80《信息交换用汉字编码字符集》基本集,这个字符集是我国中文信息处理技术的发展基础,也是目前国内所有汉字系统的统一标准。由于国标码是四位十六进制,为了便于交流,大家常用的是四位十进制的区位码。所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94)、每个区内有94个位(位号分别为01到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。在汉字的区位码中,高两位为区号,低两位为位号。 在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字 。其中16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。

    所以,当我们需要n个任意汉字时,我们不必建一个全部汉字表,而是利用区位码实现常用汉字的提取。

    下面的代码可以实现任意数目汉字的生成:

    Private Sub getrndhanzi(ByVal n As Integer)
    Dim s() As String, i As Integer
    Dim temp1 As Integer, temp2 As Integer
    ReDim s(1 To n)
    Randomize
    For i = 1 To n
    temp1 = 16 + Int(Rnd * 72)
    If temp1 = 55 Then
    temp2 = Int(Rnd * 90) '一级汉字从1601-1694,1701-1794,.....5401-5494,5501-5589,共94*40-5=3755 个汉字
    Else
    temp2 = Int(Rnd * 95) '二级汉字从5601-5694,5701-5794,.....8601-8694,8701-8794,共94*32=3008 个汉字
    End If
    s(i) = Chr("&H" & Hex(temp1 + 160) & Hex(temp2 + 160))
    Next
    Debug.Print Join(s, "")'输出
    End Sub

    Private Sub Command1_Click()
    Dim i As Integer
    For i = 1 To 25 '分别生成1-25个任意汉字
    getrndhanzi i
    Next
    End Sub

    输出:


    夫敞
    途罨椽
    涅搦侄铽
    榨藸禒艟球
    枵舟斟盯滩桫
    狲暗田苫撂蕾岢
    冠澧炫鲼噘惺馘柘
    巧愁炔哔臆策籼锭昏
    紶假媪慈乘嘎肤景濡薤
    呋刨锺灰榉懋唇弱献囟垤
    均耋撤阗驿迩愍殒埚砸宕薅
    蒹翦俄形碌哧烀爝懒缭嫔捭浑
    瑾砜疬哜遒濂勾彐綘珩苓就萌炳
    光椁旖趁鲲頎壕狁媪暑额忾帷淤黹
    湫熏裤降旺廓淳傻蜕脬荪色注紫劾吾
    陶沥瑗骶埴于喃刮瘿突赅斛简铨觞抨唼
    格鸽乜衍夙菀鲡败陆褐哙苑滓淆踵讫头绑
    德泠婷岙湔池桨郅峁汩卒控诉刍镗椎鬣越嫉
    义懂聂其定鳓脯膪巯吐昏罚返抖陵沌戗喘茺缂
    废雾旯浠疼赃勋妓鳟埏帮盂蕹朐裂祆膻拌脎威纯
    宛免作绣稞涑枭搬怿旦熨呈弃驰翔聚饰栩燧艴氢贫
    豕源髑乍蚍夏己履毕芤毁篑子褊崖坏忑霉钿瘢驵迁裨
    獬纷胚桨衫蹒疯祧武琢吣酃踱免逘浊顸坐磬挫郐婶缪锰
    拽技薯帙陕槲逗蜱嘧雌怙诖椭踉盔锍认致暝榴蘖逆捻螨噬

    附:

    汉字与区位码转换代码:

    Function quwei(ByVal x As String) As String '获得某汉字或字符对应的的区位码
    If Asc(x) >= 0 Then Exit Function
    x = Hex(Asc(x))
    quwei = Format(CDec("&H" & Left(x, 2)) - 160, "00") & Format(CDec("&H" & Right(x, 2)) - 160, "00")
    End Function


    Function hanzi(ByVal x As String) As String'获得某区位码对应汉字或字符
    hanzi = Chr("&H" & Hex(Val(Left(x, 2)) + 160) & Hex(Val(Right(x, 2)) + 160))
    End Function

  • 相关阅读:
    springmvc 之 url映射restful 及 ant
    springmvc 之 处理方法的返回值类型
    springmvc 之 数据处理
    springmvc 之 使用注解开发springmvc
    springmvc 之 配置及流程
    springmvc 之 springmvc简介,开发步骤
    mybatis 之 mybatis整合spring
    mybatis 之 mybatis缓存
    mybatis 之 mybatis的映射
    SuperMap iClient3D for WebGL教程 水面特效制作
  • 原文地址:https://www.cnblogs.com/fengju/p/6336384.html
Copyright © 2020-2023  润新知