网站cookie中有一段用户信息(包括微信用户信息,用户关联信息)的文本,使用entrance键存储,选择不同的条件后文本内容也不同,cookie上的值也会变化。本来的打算是通过将entrance值存储在sessionstorage,然后通过比较当前请求中cookie的值与sessionstorage的值是否一致来得出用户是否选择了其他条件从而进行其他操作。

但是不想将entrance键的值直接存储到sessionstorage中,一来该值内容较长,基本上超过1000个字符,二来只是为了进行比较操作就存储原始的用户信息做法不是很友好。

所以想要一个简单的文本摘要算法,以达到上述诉求。在网络上搜索了一番,并没有一个零依赖,简单的文本摘要算法。只好自己理了下思路写出了一个简单的文本摘要算法。分享出来,以飨读者。

/*** 简单的文本摘要算法。* ! 不要用于敏感业务* @param {String} text 待摘要的文本,必需* @param {String} salt 加盐内容* @param {Number} caesar 凯撒字符偏移长度* @param {Object} opts 其他配置项* @property {Number} opts.blockLength 分块长度*/
export default function textSummary(text = "",salt = "[简单]文本摘要算法",caesar = 5,opts = {}
) {if (typeof text !== "string") {throw new Error("entrance value must be a string");}const { blockLength = 16 } = opts;if (blockLength >= 36 || blockLength < 16) {throw new Error("blockLength options prop is wrong value, it is value in range:16~36");}// 加盐const textArr = `${text};salt=${salt}`.split("");const _0bTextArr = textArr.map(str => str.codePointAt(0) + caesar) // 凯撒字符偏移.map(num => num.toString(2)); // 转化为二进制// 分块const _0bTextStr = _0bTextArr.join("");const blockAmount = Math.ceil(_0bTextStr.length / blockLength);const _0bTextBlockArr = Array(blockAmount);for (let i = 0; i < blockAmount; i++) {let subStr = _0bTextStr.slice(i * blockLength, (i + 1) * blockLength);// 最后一块字符长度不足,补0if (subStr.length !== blockLength) {subStr = subStr.padEnd(blockLength, "0");}_0bTextBlockArr[i] = subStr;}// 将二进制块转化为16进制块const _0xTextBlockArr = _0bTextBlockArr.map(str =>parseInt(str, 2).toString(blockLength));const result = _0xTextBlockArr.join("");return result;
}

算法设计思路是:

  1. 对原始文本进行加盐处理。
  2. 获取到处理后文本的Unicode字符码点位置,并将获取到的位置进行凯撒字符偏移处理。
  3. 将偏移后的位置(为十进制的结果)转化为二进制。
  4. 对整个二进制文本按指定的块长度进行分块处理。最后一块内容如果字符长度不足,则补0。
  5. 将分好的每个块的二进制内容转为十六进制内容。
  6. 将得到的每个块的十六进制内容拼接在一起并返回其值。

思考了下,由于在步骤4对最后一块内容进行了补0操作,导致该块内容在逆处理时得不到肯定的值,从而导致算法不可逆。

本算法虽说是摘要算法,但实质上有加密,线性压缩的一点功能。但还好已经满足了原本的要求。

设计一个简单的[JS]文本摘要算法相关推荐

  1. JAVA同时输入用户名和密码_用java模拟设计一个简单的“用户注册”程序。当用户输入用户名和密码时,单击“注...

    用java模拟设计一个简单的"用户注册"程序.当用户输入用户名和密码时,单击"注 2020 - 9 - 26 TAG : 所有功能均已实现,如有不满意的地方我再修改imp ...

  2. python界面设计-手把手教你用Python设计一个简单的命令行界面

    原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...

  3. 大学慕课MOOC设计一个简单的计算工具

    题目: ‎编程题: ‎设计一个简单的四则运算工具,有一个标题为"计算"的窗口,窗口布局为FlowLayout.设计四个按钮,分别命名为"加"."减&q ...

  4. 如何设计一个简单的网页

    设计一个简单的网页 1.按住文件新建文本(Ctrl+N),设计一个网页标题,点击创建 2.在<body>内部加入所需要的标签 如图中需要标题标签,水平线标签,段落标签 3.保存(Ctrl+ ...

  5. 设计一个简单的四则计算器

    c# using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; u ...

  6. 设计一个简单的购物页面(html+css+php)

    水平有限,精力有限,很多东西写得可能不那么详细,有不懂可以留言提问,懂的尽量解答 首先讲一下,购物页面肯定会涉及到数据库部分的,我这篇文章数据库方面不会详细讲,就简单给个思路.购物需要用到cookie ...

  7. 用VB制作简单加法计算机,用VB设计一个简单的加法程序

    计算机的多媒体技术已经广泛普及, 对于一般的用户来说, 采用可视化编程工具是的选择, VB程序设计语言就是其中一个典型的代表.Visual Basic是Microsoft Windows的编程语言.V ...

  8. 设计一个简单分页存储管理系统_【系统架构】如何设计一个简单灵活的收银系统?看这里!(1)...

    在电商项目中,收银系统是一个不可或缺的功能,因为你不仅要通过它来进行收款.退款,而且也要通过它进行财务的对账.报税等.因此,如何设计一个简单灵活的收银系统,对于开发电商项目来说非常重要. 那如何设计一 ...

  9. java完成一个学生信息调查程序_利用Java设计一个简单的学生信息管理程序

    利用Java设计一个简单的控制台学生信息管理程序 此程序可作为课设的参考,其中信息存储于文件中. 创建了学生类Student,用于存储学号等的信息.创建StudentFunction类,用于实现诸如学 ...

最新文章

  1. [VC6] 图像文件格式数据查看器
  2. linux 擦 日志,linux日志清除脚本(擦屁股必备)
  3. ubuntu下 ffmpeg视频编码和转换命令
  4. 【Google Play】管理目标受众群体 ( 加入“亲子同乐计划“ 由于政策原因 “更新被拒“ 后的处理 )
  5. 文巾解题 7. 整数反转
  6. 编译原理预测分析法c语言,编译原理预测分析法C语言的实验报告.doc
  7. 使用Backtrace函数打印调用栈 - Debug居家必备
  8. 【Android车载系统 News | Tech 1】News 谷歌开发车载Android系统 2014-12-19
  9. php msgid排重,如何应用php数组对百万数据停止排重
  10. vba校对不同工作薄中的内容
  11. sob攻略超详细攻略_2020成都超详细旅游,美食攻略
  12. 《人工智能及其应用》1-6章
  13. 专业PLC数据采集软件PLC-Recorder通过ADS通讯进行倍福TwinCAT2和TwubCAT3数据采集的介绍
  14. java总结一:JSON转对象
  15. Oracle Coherence中文教程四:构建一个Coherence 应用
  16. OpenCV笔记之六(4)——图像处理之颜色通道拆分、合并及颜色空间
  17. R 回归 虚拟变量na_R语言 | 生存分析之R包survival的单变量和多变量Cox回归
  18. 一个元素位于另一个元素之上,点击上面的元素引发下面元素事件操作
  19. shell脚本掐头去尾
  20. 英语四级议论文的基本万能模板

热门文章

  1. 数据结构和算法(DSA)的本质及其关系:从哲学辩证法和数学函数角度的分析
  2. 3.项目记录将ODS层的数据处理成DWD层
  3. Objective-C基础教程读书笔记(8)
  4. Wio RP2040无线WiFi迷你开发板Arduino IDE开发环境安装与使用基础
  5. 【微信小程序】表单提交验证及获取表单输入的值
  6. Python如何免费获取付费文档的数据, 保存word文档
  7. 摒弃传统观念,展现女性德才
  8. DMVPN中心站点动态域名解析
  9. 项目管理知识体系指南(PMBOK指南)(第5版)
  10. 小迪安全-sql注入-笔记