# ¿Cómo se obtiene el checksum de una cadena?

**URL:** <https://foros.velneo.com/t/como-se-obtiene-el-checksum-de-una-cadena/10194>\
**Category:** Velneo\
**Created:** [26 Junio, 2019 16:44 UTC](https://foros.velneo.com/t/como-se-obtiene-el-checksum-de-una-cadena/10194 "2019-06-26T16:44:37Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![basesoft1](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/basesoft1/32/4546_2.png) [@basesoft1](https://foros.velneo.com/u/basesoft1)\
**Post date:** [26 Junio, 2019 16:44 UTC](https://foros.velneo.com/t/como-se-obtiene-el-checksum-de-una-cadena/10194/1 "2019-06-26T16:44:37Z")

</div>

¿Alguien es tan amable de decirme si esta función que he creado es cómo se obtiene el checksum de una cadena?  
 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/4/40393bb5b0d7a8d81759b0f00098c84dd5e74a27.png) )

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [26 Junio, 2019 17:19 UTC](https://foros.velneo.com/t/como-se-obtiene-el-checksum-de-una-cadena/10194/2 "2019-06-26T17:19:43Z")

</div>

Hola basesoft.

Velneo ya dispone de funciones para calcular Checksum de cadenas de caracteres.  
[https://doc.velneo.es/funciones-de-códigos.html](https://doc.velneo.es/funciones-de-c%C3%B3digos.html)

Aunque por supuesto puedes tener tu propia función Checksum personalizada.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![basesoft1](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/basesoft1/32/4546_2.png) [@basesoft1](https://foros.velneo.com/u/basesoft1)\
**Post date:** [27 Junio, 2019 18:46 UTC](https://foros.velneo.com/t/como-se-obtiene-el-checksum-de-una-cadena/10194/3 "2019-06-27T18:46:12Z")

</div>

Gracias, Paco, pero no encuentro entre las funciones de código ninguna que simplemente haga una suma XOR.  
La necesito para completar un comando de una balanza (Protocolo Tisa ) para una comunicación bidireccional por un puerto serie.  
 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/8/8b6b9285f4dbff0460763e1d5f5517a7352f9778.png).

---

<div class="post-metadata">

**Author:** ![pacosatu](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/pacosatu/32/5131_2.png) [@pacosatu](https://foros.velneo.com/u/pacosatu)\
**Post date:** [27 Junio, 2019 22:48 UTC](https://foros.velneo.com/t/como-se-obtiene-el-checksum-de-una-cadena/10194/4 "2019-06-27T22:48:43Z")

</div>

Hola basesoft.

La suma XOR de la cadena coge cada caracter de la Cadena y aplica la función Binaria XOR entre ellos.  
No le veo mayor misterio.

Prueba este ejemplo:

```
Rem ( Calcula el Checksum como la suma XOR de los caracteres de una cadena )
Pedir dato ( "Introduzca la Cadena", CADENA_TEXTO, Texto, "Cadena para calcular el Checksum XOR", )
Set ( NVALOR, 0 )
Set ( CLISTA_BIN, "" )
Recorrer buffer ( CADENA_TEXTO, CVALOR )
  Set ( CLISTA_BIN, CLISTA_BIN + "\c" + CVALOR + "\c b" + rightJustified(numberToStringBin(getLatin1CharCode(CVALOR)), 8, "0") + " h" + numberToStringHex(getLatin1CharCode(CVALOR)) + "\n" )
  Set ( NVALOR, binaryXOR(NVALOR, getLatin1CharCode(CVALOR)) )
  Libre
Mensaje ( "Suma XOR de la cadena de Texto\n" + CLISTA_BIN + "\n\nResultado:\n" + "\c" + getLatin1Char(NVALOR) + "\c b" + rightJustified(numberToStringBin(NVALOR), 8, "0") + " h" + numberToStringHex(NVALOR) , Información, , )

```

Obtienes al final el valor **getLatin1Char(NVALOR)** con el caracter Checksum después del XOR.

Saludos  
Paco Satué

---

<div class="post-metadata">

**Author:** ![basesoft1](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/basesoft1/32/4546_2.png) [@basesoft1](https://foros.velneo.com/u/basesoft1)\
**Post date:** [28 Junio, 2019 09:36 UTC](https://foros.velneo.com/t/como-se-obtiene-el-checksum-de-una-cadena/10194/5 "2019-06-28T09:36:49Z")

</div>

Gracias, Paco: Mi despiste es que en la descripción de la función dice  
binaryXOR( entero1, entero2 )  
Y dudaba del significado de entero1 y entero 2  
Bien, en mi función, la primitiva, los “enteros2” los sustituyo por el valor de código ascii  
para el codec ISO-8859-1 (incluso las cadenas a sumarXOR no pasarán de caracteres ASCII)  
Tú utilizas Latín1, es parecido)  
Me faltó en mi función el reconvertir el último XOR al carácter correspondiente  
Muchas gracias, repito: Tú siempre tan disponible  
Juan Figueroa

---

<div class="post-metadata">

**Author:** ![basesoft1](https://yyz1.discourse-cdn.com/flex035/user_avatar/foros.velneo.com/basesoft1/32/4546_2.png) [@basesoft1](https://foros.velneo.com/u/basesoft1)\
**Post date:** [28 Junio, 2019 09:53 UTC](https://foros.velneo.com/t/como-se-obtiene-el-checksum-de-una-cadena/10194/6 "2019-06-28T09:53:42Z")

</div>

He aquí la nueva versión de la función CHECKSUM(Cadena)  
 ![image](https://canada1.discourse-cdn.com/flex035/uploads/velneo/original/2X/7/76ee94b4165b73d887ff5d71717949b481a27a0e.png)

Juzgarla con benevolencia, pero juzgarla (por favor)
