As long as it changes whenever the resource representation changes, how you produce it is completely up to you.
You should try to produce it in a way that additionally:
- doesn’t require you to re-compute it on each conditional GET, and
- doesn’t change if the resource content hasn’t changed
Using hashes of content can cause you to fail at #1 if you don’t store the computed hashes along with the files.
Using inode numbers can cause you to fail at #2 if you rearrange your filesystem or you serve content from multiple servers.
One mechanism that can work is to use something entirely content dependent such as a SHA-1 hash or a version string, computed and stored once whenever your resource content changes.