If you're not too keen on saving up on the transmitted bytes, this is the easy way out.

Code:
MyString:    var   byte[30]           ' this is where the string will lie
CheckSum:  var   word               ' quite obvious, eh?

LocalCnt:     var   byte                ' a counter

Checksum_it:
          CheckSum = 0                  ' start with 0
          for LocalCnt = 1 to 30       ' change this to suit the length of string 
                                                   ' you will parse
                   ' add the value of the character you read to checksum
                   ' after removing the ascii bias of character '0'
                   Checksum = Checksum + MyString[LocalCnt]-$30
          next
          return                            ' your checksum is cooked and ready to eat :)

main:
          gosub CheckSum_it
          gosub  SendTheString           ' you might be having this
          hserout [Checksum]              ' send the checksum
 
          goto main

This code is a concept - not tested or certified. It may not work as I am rusty these days. Too little rain with high humidity does this often

Use this as a guide to refine your thoughts
Good luck